Это атрибуты для исключений Python, но у меня возникают проблемы с обволакиванием вокруг них. Документация Python кажется довольно спокойной. Я взглянул на documentation, но довольно смущен. Итак, в чем разница между ними и как они используются?В чем разница между __cause__ и __context__?
EDIT: На этой ноте, как они связаны с __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
Документ тонкий, потому что это более или менее внутренние переменные, о которых большинство питонов не знает. Причиной упоминания их вообще является: а) они видны и б) люди, которые поймают одну ошибку и поднимут другую, возможно, должны знать. –