Что рекомендуется для обработки всех исключений в скрипте python, чтобы сохранить его от сбоя? Должен ли я обернуть весь код в «try ... except»? Есть ли другой, более разумный способ?Предотвращение сбоя сценария python
ответ
Да, чтобы убедиться, что он выходит из изящно вы можете сделать
try:
your code
except:
print("Uh oh!")
однако, быть осторожным, чтобы не заглушить ошибки полностью, чтобы пользователь знал, что что-то пошло не так, что вы можете это исправить , Возможно, вы захотите даже распечатать сообщение об ошибке.
try:
your code
except Exception as err:
print("Uh oh, please send me this message: '" + err + "'")
Обработка/улавливание всех исключений является антипаттом Питона. Проверьте это
https://realpython.com/blog/python/the-most-diabolical-python-antipattern/
"Следующий фрагмент кода является одним из самых самоубийственных вещей разработчик Python может написать:"
try:
do_something()
except:
pass
редактировать:
Почему бы не написать except Exception
«Существуют варианты, которые равны одному и тому же, - например,« исключая исключение »или« кроме исключения как е: ». Они все делают то же самое массивные медвежье: тихо и незаметно пряча условия ошибки, которые в противном случае могут быть быстро обнаружены и перевозимые «
Вы можете увидеть мое полное объяснение 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, который предлагает аль от большей мощности за очень небольшую дополнительную работу.
ИМХО это не всегда лучший способ пойти. У меня был сотрудник, который делал подобные вещи в веб-приложении Flask. За исключением того, что его протокол регистрации был испорчен, поэтому исключения исчезли.Лучшим решением было удалить все попытки: за исключением: блоков, которые он обернул вокруг * все *, и вместо этого разрешить Flask обрабатывать журнал исключений, что очень хорошо, в дополнение к возврату в браузер соответствующего кода состояния (500). –
@AlexGRice Отлично, если вы используете Flask. Кроме того, я отмечаю в своем полном объяснении, что это, как правило, плохая идея, но если вам нужно это сделать, так оно и есть. – TemporalWolf
Использование попробовать и кроме определенно
try:
print('This code be running') # your code here
except Exception as e:
print('This code NOT be running because of', e)
Пожалуйста, воздержитесь от слов проклятия здесь. SO следует рассматривать как профессиональный ресурс с языком, который был бы подходящим на рабочем месте. – skrrgwasme
- 1. Предотвращение сбоя сценария при ошибке разрешений
- 2. Предотвращение сбоя Segue
- 3. Предотвращение сбоя Visual Studio
- 4. Предотвращение сбоя весенней партии
- 5. Предотвращение сбоя кеша IIS
- 6. Предотвращение сбоя в UICollectionView
- 7. signal.alarm Предотвращение выполнения сценария
- 8. Устранение неполадок и предотвращение сбоя
- 9. Предотвращение андроидного приложения от сбоя
- 10. Dart Web Server: предотвращение сбоя
- 11. Предотвращение сбоя приложения Node TypeError
- 12. Предотвращение сбоя ядра Python при запуске приложения в QT
- 13. NodeJS: предотвращение сбоя приложения при ошибке
- 14. Предотвращение сбоя приложения при недоступности сети
- 15. Предотвращение сбоя узла из-за нехватки памяти
- 16. Предотвращение сбоя файла MEX в MATLAB
- 17. Предотвращение сбоя события при отправке сообщения midi
- 18. Предотвращение сбоя пружины при сбое одного компонента
- 19. Обработка ошибок NSKeyedUnarchiver - предотвращение сбоя в Swift
- 20. Предотвращение сбоя C# с недопустимым вводом пользователя
- 21. Предотвращение сбоя скрипта на стороне сервера
- 22. Предотвращение сбоя программы при вводе неправильных координат
- 23. Предотвращение сбоя CoreData для обновления пользователей
- 24. Предотвращение переполнения стека Исключение из процесса сбоя
- 25. Предотвращение запуска Octopus сценария развертывания
- 26. Предотвращение загрузки изображений из сценария
- 27. JS: Предотвращение безответных ошибок сценария
- 28. Предотвращение выключения/перезагрузки до сценария фон Python завершает
- 29. Выполнение сценария Selenium даже после сбоя теста
- 30. Вызовите функцию момента до сбоя сценария?
Зависит от того, почему это сбой. Уловка try ... позволит вам закончить более изящно ... если, например, скрипт не будет правильно перехватывать исключение в другом месте, он должен. – AlG
Существует не какой-то волшебный общий «сохранить его от сбоя», который вы можете применить для исправления каждой ошибки, которая может привести к сбою вашего кода. Мы все хотели бы, чтобы что-то подобное существовало, но программирование не так просто. – user2357112
В моем ответе ниже я ссылаюсь на статью, в которой объясняется, почему все это делается в попытке: кроме: block - это плохая идея, потому что она (может/может) скрывает различные другие проблемы в вашей логике скриптов. Обработка исключений должна быть более конкретной. По умолчанию, если есть необработанное исключение, тогда среда выполнения python будет печатать исключение и stacktrace, что обычно является тем, что вы хотите. –