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
Другие вопросы по тегам