有没有办法在python中访问嵌套或重新引发的异常?

Tho*_*mas 9 python traceback

python中的一个常见模式是捕获上游模块中的错误,并将该错误重新引发为更有用的错误.

try:
    config_file = open('config.ini', 'r')
except IOError:
    raise ConfigError('Give me my config, user!')
Run Code Online (Sandbox Code Playgroud)

这将生成表单的堆栈跟踪

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
__main__.ConfigError: Give me my config, user!
Run Code Online (Sandbox Code Playgroud)

有没有办法访问包装的异常,以生成更像这样的堆栈跟踪?

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
__builtin__.IOError: File Does not exist.
Exception wrapped by:
  File "<stdin>", line 4, in <module>
__main__.ConfigError: Give me my config, user!
Run Code Online (Sandbox Code Playgroud)

编辑:

我试图打败的问题是,一些第三方代码可以包装异常最多3次,我希望能够确定根本原因,即检查异常堆栈并确定异常根本原因的通用方法无需向第三方模块添加任何额外代码.

yak*_*yak 10

这被称为异常链接,并在Python 3中被支持.

PEP 3134:http://www.python.org/dev/peps/pep-3134/

在Python 2中,除非将其保存在except块中,否则在引发新异常时会丢失旧异常.

  • "将它保存在除外块中"是什么意思?这样做有标准的方法吗? (2认同)