Tyl*_*ton 10 python exception python-3.x
这些是Python异常的属性,但是我无法绕过它们.Python的文档似乎相当安静.我看了一下文档,但我很困惑.那么,两者之间有什么区别?它们是如何使用的?
编辑:就此而言__traceback__,如果有的话,它们是如何相关的?
编辑3:我想我只是不明白__cause__.我终于明白了__traceback__和__context__.为什么不attribute_error.__cause__参考AttributeError()?
try:
raise NameError() from OSError
except NameError as name_error:
print('name_error.__cause__: %s' % repr(name_error.__cause__))
print('name_error.__context__: %s' % repr(name_error.__context__))
print('name_error.__traceback__: %s' % repr(name_error.__traceback__))
try:
raise AttributeError()
except AttributeError as attribute_error:
print('attribute_error.__cause__: %s' % repr(attribute_error.__cause__))
print('attribute_error.__context__: %s' % repr(attribute_error.__context__))
print('attribute_error.__traceback__: %s' % repr(attribute_error.__traceback__))
raise attribute_error from IndexError
Run Code Online (Sandbox Code Playgroud)
这输出
name_error.__cause__: OSError()
name_error.__context__: None
name_error.__traceback__: <traceback object at 0x000000000346CAC8>
attribute_error.__cause__: None
attribute_error.__context__: NameError()
attribute_error.__traceback__: <traceback object at 0x000000000346CA88>
Traceback (most recent call last):
File "C:\test\test.py", line 13, in <module>
raise attribute_error from IndexError
File "C:\test\test.py", line 8, in <module>
raise AttributeError()
AttributeError
Run Code Online (Sandbox Code Playgroud)
Gar*_*tty 15
__cause__是异常的原因 - 由于给定的异常,引发了当前异常.这是一个直接链接--X抛出此异常,因此Y必须抛出此异常.
__context__另一方面,意味着在尝试处理另一个异常时引发了当前异常,并定义了在引发此异常时正在处理的异常.这样你就不会失去其他异常发生的事实(因此在这个代码中抛出异常) - 上下文.X抛出此异常,在处理它时,Y也被抛出.
__traceback__向您展示堆栈 - 为了获得当前代码行而遵循的各种级别的函数.这允许您查明导致异常的原因.它很可能被用于(可能与之协同__context__)以找到导致给定错误的原因.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |