Я думаю, помещая единицы в Ваши идентификаторы, огромны запах дизайна. Это почти, конечно, означает выбор неправильного языка: если единицы так важны для проекта, необходимо использовать язык, система типов которого способна к представлению их.
Нет, в , наконец,
время sys.exc_info
все-Нет, есть ли был исключением
или не. Используйте:
try:
whatever
except:
here sys.exc_info is valid
to re-raise the exception, use a bare `raise`
else:
here you know there was no exception
finally:
and here you can do exception-independent finalization
Вы захотите сделать это в разделе except, а не в final.
См.: http://www.doughellmann.com / article / Python-Exception-Handling /
Блок finally
будет выполняться независимо от того, было сгенерировано исключение или нет, поэтому, как указывает Джош, вы, скорее всего, не хотите обработать его там.
Если вам действительно нужно значение возникшего исключения, вы должны перехватить исключение в блоке except
и либо обработать его соответствующим образом, либо повторно возбудить его, а затем используйте это значение в блоке finally - с расчетом, что оно могло никогда не быть установлено, если во время выполнения не возникло исключение.
import sys
exception_name = exception_value = None
try:
# do stuff
except Exception, e:
exception_name, exception_value = sys.exc_info()[:2]
raise # or don't -- it's up to you
finally:
# do something with exception_name and exception_value
# but remember that they might still be none