Поймай любую ошибку в Python - PullRequest
21 голосов
/ 25 июля 2011

Возможно ли поймать любую ошибку в Python? Мне все равно, какими будут конкретные исключения, потому что все они будут иметь один и тот же запасной вариант.

Ответы [ 3 ]

31 голосов
/ 25 июля 2011

Использование except само по себе поймает любое исключение, кроме segfault.

try:
    something()
except:
    fallback()

Возможно, вы захотите обрабатывать KeyboardInterrupt отдельно, если вам нужно использовать его для выхода из скрипта:

try:
    something()
except KeyboardInterrupt:
    return
except:
    fallback()

Есть хороший список основных исключений, которые вы можете поймать здесь . Мне также очень нравится модуль traceback для извлечения стека вызовов из исключения. Попробуйте traceback.format_exc() или traceback.print_exc() в обработчике исключений.

24 голосов
/ 25 июля 2011
try:
    # do something
except Exception, e:
    # handle it

Для Python 3.x:

try:
    # do something
except Exception as e:
    # handle it
8 голосов
/ 25 июля 2011

Вы также можете посмотреть на sys.excepthook :

Когда исключение возникает и не обрабатывается, переводчик вызывает sys.excepthook с тремя аргументами, класс исключения, исключение экземпляр и объект трассировки. В интерактивном сеансе это происходит непосредственно перед возвратом управления в подсказку; в питоне Запрограммируйте это происходит непосредственно перед выходом из программы. Обработка такие исключения верхнего уровня могут быть настроены путем назначения другого функция с тремя аргументами для sys.excepthook.

Пример:

def except_hook(type, value, tback):
    # manage unhandled exception here
    sys.__excepthook__(type, value, tback) # then call the default handler

sys.excepthook = except_hook
...