У меня есть список функций, которые могут потерпеть неудачу, и если один из них не работает, я не хочу, чтобы сценарий остановился, но для продолжения следующей функции.Как предотвратить «слишком широкое исключение» в этом случае?
Я уверен, выполнение его с чем-то вроде этого:
list_of_functions = [f_a,f_b,f_c]
for current_function in list_of_functions:
try:
current_function()
except Exception:
print(traceback.format_exc())
Это работает хорошо, но это не PEP8 соответствует:
При ловле исключения, упоминаются конкретные исключения, когда возможно, вместо того, чтобы использовать голый, кроме: clause.
Например, используйте:
try: import platform_specific_module except ImportError: platform_specific_module = None
Голые за исключением: статьи поймает SystemExit и KeyboardInterrupt исключений, что делает его более трудным, чтобы прервать программу с помощью Control-C, и может скрыть другие проблемы. Если вы хотите поймать все исключения , что ошибки сигнальной программы, используйте исключение Исключение: (голый кроме эквивалент, кроме BaseException:).
Хорошее эмпирическое правило, чтобы ограничить использование голой «за исключением» статей в двух случаях:
Если обработчик исключений будет распечатывания или протоколирование отслеживающий; по крайней мере, пользователь будет знать, что произошла ошибка.
Если код должен выполнять некоторую работу по очистке, но затем разрешает исключение с повышением вверх. попробуйте ... наконец, может быть лучший способ обработки этого случая.
Как это сделать?
Я не понимаю, о чем вы спрашиваете. Какие исключения вы * хотите обрабатывать? – BrenBarn
Какие исключения могут быть вызваны вашей функцией? – haifzhan
'except Exception:' отличается от bare 'except:'. Этот раздел PEP8 предупреждает о последнем, вы делаете первое. – roippi