我正在尝试编写一种以以下方式进行错误检查的函数。
def check_var_type(var, var_name, type):
t = type(var)
if t is type or t is list:
return None
else:
return TypeError(
f"Invalid {var_name} type '{t.__module__}.{t.__name__}', "
f"'{float.__module__}.{float.__name__}' or "
f"'{list.__module__}.{list.__name__}' expected.")
my_var = 1
raise check(my_var, 'my_var', float)
我对Python的raise
命令的期望是,如果我将None
传递给它,它将简单地忽略它并且不会引发异常。但是,答复是:
TypeError: exceptions must derive from BaseException
然后,我查看了Python的built-in exception types,看是否存在诸如Nonthing
,NoError
之类的东西。不过没有运气。
我当然可以在check_var_type
函数中引发异常,但是我不想这样做,因为这会在堆栈跟踪中添加额外的一行。
因此,我的(也许很愚蠢)问题是:如何使用raise
不引发异常? :-)
谢谢
答案 0 :(得分:2)
如果您不想引发异常,请不要致电let rec mirror = function
| Empty -> Empty
| Node(t1, i, t2) -> Node(mirror t2, i, mirror t1)
(其唯一的工作就是引发异常)。
也许您真正想要的是在您确实想引发异常时从 inside raise
调用raise
,而当您真正想引发异常时,只需使用check_var_type
不要。
另一种选择可能是将return
保留原样,但将对其的调用包装在check_var_type
中,以便在返回异常时引发返回的异常。