#python #exception
#python #исключение
Вопрос:
У меня есть try/except
блок с несколькими блоками except. Я хочу иметь возможность выполнять фрагмент кода, только если возникло какое-либо из исключений. Похоже на finally
инструкцию, но finally
выполняется независимо от того, было вызвано исключение или нет. Должен ли я просто добавлять этот код в каждый except
блок?
Комментарии:
1. Короткий пример был бы полезен. Существует ли также код, зависящий от типа? Или будет ли работать их все сразу (например,
except TypeError, ValueError as e:
)?
Ответ №1:
Вы можете выполнить собственную проверку типов в обработчике исключений, чтобы работать с кодом, зависящим от типа, и общим кодом.
def it_will_end_in_tears():
raise ValueError("bad value")
try:
val = it_will_end_in_tears()
except (TypeError, ValueError) as e:
if isinstance(e, TypeError):
print("type error stuff")
elif isinstance(e, ValueError):
print("value error stuff")
print("common stuff")
finally:
print("finally")
Ответ №2:
Вместо копирования вставки кода в каждый блок except, я бы объявил логическое execute_code = False
значение и установил его True
в каждом из блоков except. После целого try/except
добавьте if execute_code:
, а затем реализуйте код для выполнения, если исключение произошло один раз внутри if
блока.