Есть ли в python способ выполнить фрагмент кода, только если в блоке try / except возникает какое-либо исключение?

#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 блока.