如何使用`if`语句测试异常对象?

der*_*end 2 python exception

如果我事先不知道引发了什么类型的异常,我如何测试函数是否返回异常对象?

def func():
    try:
        bad_thing_happens  # NameError("global name 'bad_thing_happens' is not defined",)
        return True
    except Exception as e:
        return e

result = func()
if result == Exception:
    print 'a bad thing happened'
Run Code Online (Sandbox Code Playgroud)

在这种情况下if语句返回False,我会错过该异常?

Ama*_*dan 6

函数返回的异常,而不是提高他们或让他们泡是一件坏事.

也就是说,您可以测试对象是否是使用类的实例isinstance(object, klass).


Rus*_*hal 5

正确的方法是捕获函数之外的异常.例如:

def func():
    bad_thing_happens
    # NameError("global name 'bad_thing_happens' is not defined",)
    return True

try:
    result = func()
except NameError:
    print("a bad thing happened")
Run Code Online (Sandbox Code Playgroud)

这使得异常来自(函数)的位置更加清晰,并避免了尝试返回异常的混乱 - 毕竟,异常通常意味着被捕获而不返回.