Как правильно игнорировать исключения

695
задан peterh 12 May 2019 в 16:57
поделиться

5 ответов

try:
  doSomething()
except: 
  pass

или

try:
  doSomething()
except Exception: 
  pass

Разница в том, что первый также поймает KeyboardInterrupt , SystemExit и тому подобное, которые получены непосредственно из exceptions.BaseException , а не exceptions.Exception .
Подробности см. В документации:

988
ответ дан 22 November 2019 в 21:30
поделиться

Как правило, рекомендуется отлавливать только те интересующие вас ошибки. В случае shutil.rmtree это, вероятно, OSError :

>>> shutil.rmtree("/fake/dir")
Traceback (most recent call last):
    [...]
OSError: [Errno 2] No such file or directory: '/fake/dir'

Если вы хотите игнорировать эту ошибку, вы должны сделать:

try:
    shutil.rmtree(path)
except OSError:
    pass

Почему? Скажем, вы (как-то) случайно передали функции целое число вместо строки, например:

shutil.rmtree(2)

Это выдаст ошибку "TypeError: приведение в Unicode:

129
ответ дан 22 November 2019 в 21:30
поделиться

Если вы просто хотите сделать попытку catch без обработки исключения, как вы это делаете в Python?

Это зависит от того, что вы подразумеваете под «обработкой».

Если вы хотите перехватить его, не предпринимая каких-либо действий, отправленный вами код будет работать.

Если вы имеете в виду, что вы хотите выполнить действие для исключения без остановки исключение от подъема в стек, тогда вы хотите что-то вроде этого:

try:
    do_something()
except:
    handle_exception()
    raise  #re-raise the exact same exception that was thrown
110
ответ дан 22 November 2019 в 21:30
поделиться
try:
      doSomething()
except Exception: 
    pass
else:
      stuffDoneIf()
      TryClauseSucceeds()

К вашему сведению, предложение else может идти после всех исключений и будет запускаться только в том случае, если код в попытке не вызывает исключения.

10
ответ дан 22 November 2019 в 21:30
поделиться

Для полноты:

>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print "division by zero!"
...     else:
...         print "result is", result
...     finally:
...         print "executing finally clause"

... из учебника python .

Также обратите внимание, что вы можете зафиксировать исключение следующим образом:

>>> try:
...     this_fails()
... except ZeroDivisionError as detail:
...     print 'Handling run-time error:', detail
54
ответ дан 22 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

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