Python все в блоке try
Я пишу большой сценарий пакетного типа на Python, и в конце мне нужно выполнить некоторую очистку, независимо от того, произошло ли исключение. Для этого я просто помещаю основную программу в блок try, а очистку - в блок finally.
Кажется, это работает хорошо, но мой вопрос заключается в том, как распечатать любые исключения, которые могут возникнуть. В настоящее время он просто игнорирует их и переходит к блоку finally.
2 ответа
Вы можете использовать трассировку.
что-то вроде:
import traceback
try:
foo
except:
print(traceback.format_exc())
finally:
cleanup
Вы должны просто иметь возможность использовать try
/finally
блок без обработчика исключений. Он не будет перехватывать исключение или подавлять трассировку, просто убедитесь, что ваш код очистки выполняется независимо от того, существует ли исключение. Вот и весь смысл finally
,
Вот пример:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> try:
... print 'begin try'
... assert False
... print 'end try'
... finally:
... print 'finally'
...
begin try
finally
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
AssertionError