Я могу получить исключение из наконец блок в Python?

Я думаю, помещая единицы в Ваши идентификаторы, огромны запах дизайна. Это почти, конечно, означает выбор неправильного языка: если единицы так важны для проекта, необходимо использовать язык, система типов которого способна к представлению их.

33
задан Mr_and_Mrs_D 31 May 2015 в 16:33
поделиться

3 ответа

Нет, в , наконец, время 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
69
ответ дан 27 November 2019 в 17:44
поделиться

Вы захотите сделать это в разделе except, а не в final.

См.: http://www.doughellmann.com / article / Python-Exception-Handling /

2
ответ дан 27 November 2019 в 17:44
поделиться

Блок 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
12
ответ дан 27 November 2019 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: