在Python中引发“空”异常

时间:2018-09-07 12:31:35

标签: python

我正在尝试编写一种以以下方式进行错误检查的函数。

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,看是否存在诸如NonthingNoError之类的东西。不过没有运气。

我当然可以在check_var_type函数中引发异常,但是我不想这样做,因为这会在堆栈跟踪中添加额外的一行。

因此,我的(也许很愚蠢)问题是:如何使用raise不引发异常? :-)

谢谢

1 个答案:

答案 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中,以便在返回异常时引发返回的异常。