Python печатает только последнюю трассировку?
рассмотрим следующий код и вывод:
>>> try:
... raise KeyboardInterrupt
... except KeyboardInterrupt:
... raise Exception
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyboardInterrupt
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
Exception
>>>
Я хотел бы напечатать только самую последнюю трассировку (ту, в которой Exception
был поднят).
Как этого можно достичь?
из приведенного выше примера я хотел бы напечатать следующее, как если бы raise Exception
был вызван снаружи except
предложения.
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
Exception
1 ответов
идеальный вопрос для меня.
вы можете подавить контекст исключения, то есть первую часть обратной трассировки, явно вызывая исключение from None
:
>>> try:
raise KeyboardInterrupt
except:
raise Exception from None
Traceback (most recent call last):
File "<pyshell#4>", line 4, in <module>
raise Exception from None
Exception
Это было оформлено в PEP 409 и дальнейшее улучшение в PEP 415. The исходный запрос ошибка для этого был подан сам кстати.
обратите внимание, что подавление контекста на самом деле не удалить контекст из нового исключения. Таким образом, вы все еще можете получить доступ к исходному исключению:
try:
try:
raise Exception('inner')
except:
raise Exception('outer') from None
except Exception as e:
print(e.__context__) # inner