假设我有一个由另一个触发的异常。
我有一组针对该内部异常的动作。显然首先我必须抓住最极端的例外,我这样做,然后我如何except
跟随的那个?
答案 0 :(得分:1)
显然首先我必须抓住最外面的例外
是
我这样做,然后我怎么办除了
之后的那个
你不能except
跟随的那个因为你太晚了。但是,您可以检查捕获的异常的上下文。例如:
>>> def foo():
... try:
... errorerror
... except NameError:
... 1/0
...
>>> try:
... foo()
... except ZeroDivisionError as err:
... zerr = err
...
>>> zerr.__context__
NameError("name 'errorerror' is not defined")
在内部异常之后清理时,外部异常实例上可能还有其他有趣的信息。看看:
__context__
属性__cause__
属性__traceback__
属性,以便在需要时提供更多上下文有关详细信息,请参阅PEP 3134 -- Exception Chaining and Embedded Tracebacks。