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


Пример 1

Если операторы не предполагают возможного возникновения исключений, то их оборачивание в try-except является избыточным.

Плохо:


def get_percent(payload):
try:
    number = float(payload)  # Преобразование данных (может вызвать ValueError)
    logger.info("Обработка числа:", number) # Логирование обычно не вызывает исключений
    result = number * 100 # Дополнительная логика, не связанная напрямую с преобразованием
except ValueError as err:
    logger.error("Произошла ошибка:", err)
    result = None
return result

Хорошо:


def get_percent(payload):
try:
    number = float(payload)
except ValueError as err:
    logger.error("Произошла ошибка:", err)
    return

logger.info("Обработка числа:", number)
return number * 100


Пример 2

Операции, которые не предполагают возникновения исключений, не нуждаются в подстраховке.

Плохо:


try:
    first_word = "Привет"
    second_word = "мир"
    whole_phrase = f"{first_word}, {second_word}!"
    print(whole_phrase)
except Exception as err:
    print("Произошло исключение:", err)

Хорошо:


first_word = "Привет"
second_word = "мир"
whole_phrase = f"{first_word}, {second_word}!"
print(whole_phrase)