Как работает try except Python, разбираем на примерах!

Очень часто возникают ситуации, когда при нормальной работе нашего скрипта, программа «падает», т.е. возникает ошибка, или еще возникает исключение, что не есть хорошо, и в этом случае вы должны понимать как работает try except Python и использовать его.

Давайте подробнее разберем несколько ситуаций, когда желательно часть кода программы помещать в блок try except, и какую именно часть кода

  • Чтение файла, который может отсутствовать:

Если программа должна открыть файл, но он может отсутствовать, без try-except возникнет ошибка FileNotFoundError, которая приведёт к сбою.

  • Деление на ноль

Если код выполняет деление, но делитель может быть равен 0, это вызовет ZeroDivisionError.

  • Преобразование строки в число

Если программа запрашивает число у пользователя, а тот введёт текст, будет ValueError.

  • Запрос к API, который может не ответить

При работе с внешними сервисами (например, API) соединение может оборваться, что вызовет requests.exceptions.RequestException.

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

В Python блок try-except используется для обработки исключений (ошибок), которые могут возникнуть во время выполнения кода. Он позволяет программе продолжить выполнение, даже если произошла ошибка.

Синтаксис использования try-except

try:
    # Код, который может вызвать исключение
    x = 1 / 0
except ZeroDivisionError:
    # Код, который выполняется при возникновении ошибки
    print("Ошибка: деление на ноль")

Кстати, официальную документацию вы найдете здесь, а что бы посмотреть все существующие типы исключений, необходимо написать следующий код:

import builtins

exceptions = [name for name in dir(builtins) if isinstance(getattr(builtins, name), type) and issubclass(getattr(builtins, name), BaseException)]
print(exceptions)

Варианты использования:

Можно указать конкретный тип ошибки:

try: 
    num = int(input("Введите число: ")) 
except ValueError: 
    print("Ошибка: нужно ввести число")

Обработка нескольких исключений

try:
    x = int(input("Введите число: "))
    y = 10 / x
except ValueError:
    print("Ошибка: введено не число")
except ZeroDivisionError:
    print("Ошибка: деление на ноль")

Обработка нескольких исключений в одном блоке

try:
    x = int(input("Введите число: "))
    y = 10 / x
except (ValueError, ZeroDivisionError) as e:
    print(f"Произошла ошибка: {e}")

Использование except без указания типа ошибки

try:
    print(10 / 0)
except Exception as e:
    print(f"Ошибка: {e}")

Да, так делать тоже можно, но не рекомендуется, так как понимание как работает try except Python это безусловно хорошо, но еще и важно понимать зачем он используется, кроме как обеспечить стабильную работу скрипта.

Использование else и finally

try:
    f = open("file.txt", "r")
    content = f.read()
except FileNotFoundError:
    print("Файл не найден")
else:
    print("Вы прочитали весь файл")
finally:
    print("Закрываем файл")

Здесь необходимо помнить 2 простых правила:

  • Код в блоке else отработает только в том случае, если выполнится код в блоке try:
  • Код в блоке finally отрабатывает в любом случае.

Когда стоит использовать try-except в Python

1️⃣ Обработка ошибок при вводе данных (пользователь может ввести неверный формат)
2️⃣ Работа с файлами (файл может отсутствовать или быть недоступным)
3️⃣ Работа с сетью (HTTP-запросы, API) (проблемы с интернетом или сервером)
4️⃣ Математические вычисления (деление на ноль, переполнение)
5️⃣ Работа с базами данных (ошибки при подключении или запросах)
6️⃣ Обращение к несуществующим ключам в словарях
7️⃣ Работа с многопоточностью и асинхронными задачами (ошибки в одном потоке не должны ломать всю программу)
8️⃣ Конвертация типов данных (ошибка при преобразовании строки в число)
9️⃣ Динамическое выполнение кода (eval, exec) (ошибки в выполняемом коде)
🔟 Работа с внешними библиотеками (отсутствие нужного модуля)

Когда НЕ нужно использовать try-except

  1. Не перехватывай ошибки, если код должен сломаться.
    Например, если ошибка указывает на проблему в логике программы.
  2. Не используй except: без указания типа ошибки.
    Это может скрыть реальные баги. Лучше перехватывать конкретные ошибки.
  3. Не используй try-except для контроля потока программы.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: