Sobes.tech
Назад к вопросам
Junior — Middle
52

Какие конструкции в Python предназначены для обработки ошибок и исключительных ситуаций?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

В Python для обработки ошибок используют try/except, а для гарантированной очистки — finally. Для генерации собственных ошибок применяют raise, а для проверки условий — assert. Важно понимать, какие исключения ловить, как не скрывать реальные проблемы и чем отличается обработка от проброса ошибки дальше.

Определение:

Обработка ошибок в Python — это механизм, который позволяет перехватывать исключения, возникающие во время выполнения программы, и управлять реакцией на них. Основная конструкция — try/except: в try помещают код, который может упасть, а в except — обработку конкретной ошибки. Дополнительно используют else для кода без ошибок и finally для выполнения действий в любом случае.

Пример использования:

def divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Нельзя делить на ноль"
    else:
        return result
    finally:
        print("Операция деления завершена")

print(divide(10, 2))
print(divide(10, 0))

Пояснение кода:

В примере в блоке try выполняется деление a / b, которое может вызвать исключение ZeroDivisionError, если b == 0. Если ошибка возникла, управление переходит в except, и функция возвращает понятное сообщение вместо падения программы. Если исключения не было, отрабатывает else, где возвращается результат деления. Блок finally выполняется всегда — и при успехе, и при ошибке — поэтому он подходит для закрытия файлов, освобождения ресурсов или логирования.

Если нужно явно создать ошибку, используют raise, например при валидации входных данных:

def set_age(age):
    if age < 0:
        raise ValueError("Возраст не может быть отрицательным")
    return age

Ключевые моменты:

  • try/except — основа обработки исключений в Python.
  • else выполняется только если в try не было ошибки.
  • finally выполняется всегда, даже если была ошибка или return.
  • raise используется для явного возбуждения исключений.
  • Ловить лучше конкретные исключения, а не except Exception без необходимости.
  • assert полезен для внутренних проверок, но не заменяет полноценную обработку ошибок.