これらは Python 例外の属性ですが、頭を悩ませています。Python のドキュメントは、これについてはかなり静かに見えます。ドキュメントを見てみましたが、かなり混乱しています。では、この 2 つの違いは何で、どのように使用されるのでしょうか。
編集:その点で__traceback__
、もしあれば、それらはどのように関連していますか?
EDIT 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
これは出力します
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