如何在python中捕获内部异常?

时间:2018-04-25 19:59:30

标签: python python-3.x

假设我有一个由另一个触发的异常。 我有一组针对该内部异常的动作。显然首先我必须抓住最极端的例外,我这样做,然后我如何except跟随的那个?

1 个答案:

答案 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