2016-12-21 2 views
-2

Что рекомендуется для обработки всех исключений в скрипте python, чтобы сохранить его от сбоя? Должен ли я обернуть весь код в «try ... except»? Есть ли другой, более разумный способ?Предотвращение сбоя сценария python

+0

Зависит от того, почему это сбой. Уловка try ... позволит вам закончить более изящно ... если, например, скрипт не будет правильно перехватывать исключение в другом месте, он должен. – AlG

+0

Существует не какой-то волшебный общий «сохранить его от сбоя», который вы можете применить для исправления каждой ошибки, которая может привести к сбою вашего кода. Мы все хотели бы, чтобы что-то подобное существовало, но программирование не так просто. – user2357112

+0

В моем ответе ниже я ссылаюсь на статью, в которой объясняется, почему все это делается в попытке: кроме: block - это плохая идея, потому что она (может/может) скрывает различные другие проблемы в вашей логике скриптов. Обработка исключений должна быть более конкретной. По умолчанию, если есть необработанное исключение, тогда среда выполнения python будет печатать исключение и stacktrace, что обычно является тем, что вы хотите. –

ответ

0

Да, чтобы убедиться, что он выходит из изящно вы можете сделать

try: 
    your code 
except: 
    print("Uh oh!") 

однако, быть осторожным, чтобы не заглушить ошибки полностью, чтобы пользователь знал, что что-то пошло не так, что вы можете это исправить , Возможно, вы захотите даже распечатать сообщение об ошибке.

try: 
    your code 
except Exception as err: 
    print("Uh oh, please send me this message: '" + err + "'") 
0

Обработка/улавливание всех исключений является антипаттом Питона. Проверьте это

https://realpython.com/blog/python/the-most-diabolical-python-antipattern/

"Следующий фрагмент кода является одним из самых самоубийственных вещей разработчик Python может написать:"

try: 
    do_something() 
except: 
    pass 

редактировать:

Почему бы не написать except Exception

«Существуют варианты, которые равны одному и тому же, - например,« исключая исключение »или« кроме исключения как е: ». Они все делают то же самое массивные медвежье: тихо и незаметно пряча условия ошибки, которые в противном случае могут быть быстро обнаружены и перевозимые «

0

Вы можете увидеть мое полное объяснение here,

, но я настоятельно рекомендую использовать. , на очень минимум:

import traceback 
import datetime 

while True: 
    try: 
    # your code 
    except: 
    with open("exceptions.log", "a") as log: 
     log.write("%s: Exception occurred:\n" % datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 
     traceback.print_exc(file=log) 

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

+0

ИМХО это не всегда лучший способ пойти. У меня был сотрудник, который делал подобные вещи в веб-приложении Flask. За исключением того, что его протокол регистрации был испорчен, поэтому исключения исчезли.Лучшим решением было удалить все попытки: за исключением: блоков, которые он обернул вокруг * все *, и вместо этого разрешить Flask обрабатывать журнал исключений, что очень хорошо, в дополнение к возврату в браузер соответствующего кода состояния (500). –

+1

@AlexGRice Отлично, если вы используете Flask. Кроме того, я отмечаю в своем полном объяснении, что это, как правило, плохая идея, но если вам нужно это сделать, так оно и есть. – TemporalWolf

0

Использование попробовать и кроме определенно

try: 
    print('This code be running') # your code here 
except Exception as e: 
    print('This code NOT be running because of', e) 
+2

Пожалуйста, воздержитесь от слов проклятия здесь. SO следует рассматривать как профессиональный ресурс с языком, который был бы подходящим на рабочем месте. – skrrgwasme

Смежные вопросы