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次,我希望能够确定根本原因,即检查异常堆栈并确定异常根本原因的通用方法无需向第三方模块添加任何额外代码.