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

Ответ

Для обработки исключений в Python используются пять ключевых слов: try, except, else, finally и raise.

  • try: Блок, в котором размещается код, способный вызвать исключение.
  • except: Блок для перехвата и обработки исключений. Можно указывать конкретный тип исключения (например, ValueError) или несколько типов в кортеже.
  • else: (Опционально) Блок, который выполняется только если в блоке try не было выброшено ни одного исключения. Полезен для разделения основного кода и обработки ошибок.
  • finally: (Опционально) Блок, который выполняется всегда, независимо от того, было исключение или нет. Используется для освобождения ресурсов (закрытие файлов, соединений с БД).
  • raise: Ключевое слово для явного выброса (порождения) исключения.

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

try:
    file = open("data.txt", "r")
    content = file.read()
    number = int(content.strip())
except FileNotFoundError:
    print("Файл не найден.")
except ValueError:
    print("Файл не содержит число.")
else:
    print(f"Успешно прочитано число: {number}")
finally:
    # Этот код выполнится в любом случае
    if 'file' in locals() and not file.closed:
        file.close()
    print("Операция завершена.")

Ответ 18+ 🔞

Да ты посмотри, какая хуйня интересная! Вот сидишь ты, пишешь код, всё летит, как по маслу, а потом — бац! — и тебе в консоль пиздатый ValueError прямо в ебало. Ну и что делать, а? Паниковать? Не, блядь, для этого умные дядьки придумали обработку исключений, чтобы твоя программа не ложилась как сука при первой же неприятности.

Вот смотри, есть у нас пять таких, блядь, волшебных словечек: try, except, else, finally и raise. Разберём, что это за звери такие.

  • try: Это как зона риска, блядь. Ты туда засовываешь код, который может накосячить. Типа открыть файл, который не существует, или превратить буквы в цифры.
  • except: А это твой спасательный круг, ёпта! Если в try всё пошло по пизде и вылетела ошибка, управление прыгает сюда. Ты можешь ловить конкретные косяки: ValueError, FileNotFoundError — и реагировать на каждый по-своему, а не одной универсальной пиздюлиной.
  • else: Вот это, блядь, хитрая жопа! Этот блок выполнится только если в try всё прошло гладко, ни одной ошибки. Удобно, чтобы отделить «основную успешную логику» от «обработки всякого говна».
  • finally: Это блок-фанатик, ему похуй, что произошло. Ошибка? Не ошибка? Ему всё равно. Он выполнится всегда. Идеально, чтобы прибраться за собой: закрыть файл, разорвать соединение с базой — чтобы ресурсы не висели, как последние пидорасы.
  • raise: А это когда ты сам, сука, решаешь, что пора устроить срач. Сам создаёшь и кидаешь исключение. «На, получай, вызывающий код, разбирайся с этим!»

Ну и чтобы не быть голословным, вот тебе пример, где вся эта банда в сборе:

try:
    file = open("data.txt", "r")
    content = file.read()
    number = int(content.strip())
except FileNotFoundError:
    print("Файл не найден.")
except ValueError:
    print("Файл не содержит число.")
else:
    print(f"Успешно прочитано число: {number}")
finally:
    # Этот код выполнится в любом случае
    if 'file' in locals() and not file.closed:
        file.close()
    print("Операция завершена.")

Видишь логику? Пытаемся открыть файл и спарсить число. Не открылся? Ловим FileNotFoundError. Открылся, но внутри не число? Ловим ValueError. Всё прошло охуенно? Тогда летим в else и празднуем. И в конце, что бы ни случилось, finally приберётся и закроет файл, если он вообще был открыт. Красота, а не жизнь!