Стратегия try except для начинающих Python – Простой отладочный инструмент с помощью обработки исключений!

Tux stops at Exception light

Если вы только начали изучать Python, то при встрече с конструкцией try except можете растеряться. "Какое имя класса нужно запомнить?", "Когда я должен это использовать?" – такие мысли могут возникнуть. В этой статье мы пошагово объясним основные концепции обработки исключений в Python и стратегию try except для новичков.


Почему важно обрабатывать исключения в Python?

При выполнении кода он не всегда работает так, как ожидается. Пользователь может ввести неверные данные, файл может отсутствовать, сеть может обрываться... Если в такие моменты программа просто остановится, это испортит пользовательский опыт.

Именно в таких ситуациях становится необходимой конструкция обработки исключений Python (try except).

Цель обработки исключений – всего лишь одна: обеспечить безопасное продолжение работы программы даже при возникновении ошибок.


Как выглядит конструкция try except?

try:
    # Код, в котором может возникнуть ошибка
except класс_исключения as e:
    # Действия при возникновении ошибки

Пример:

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print("Нельзя делить на 0:", e)

Ключевым здесь является ZeroDivisionError – это класс исключений, который является «ярлыком», указывающим, какого именно рода ошибка произошла.


Что такое классы исключений и нужно ли их запоминать?

Многие начинающие программисты Python задают такой вопрос:

"Все эти классы исключений, нужно ли их запоминать?"

Ответ: Нет!

На самом деле разработчики не запоминают все классы исключений. Вместо этого они привыкают к нескольким чаще используемым классам исключений, а для остальных обращаются к сообщениям об ошибках при возникновении проблем.

Пример:

FileNotFoundError: [Errno 2] Не такой файл или каталог: 'none.txt'

В таком случае можно написать:

except FileNotFoundError:

Вот и всё.


Топ-7 классов исключений Python

Класс исключений Когда возникает?
ValueError Когда значение неверно
TypeError Когда типы не совпадают
IndexError Когда выход за пределы списка
KeyError Когда ключа нет в словаре
ZeroDivisionError Когда деление на 0
FileNotFoundError Когда файла нет
Exception Родитель всех обычных ошибок

Запомнив эти классы, вы сможете справиться с большинством ситуаций, связанных с обработкой исключений в Python.


Так знакомьтесь со структурой try except!

  1. Если не знаете, оберните в Exception.
try:
    dangerous_code()
except Exception as e:
    print("Произошла проблема:", e)
  1. Изучите нужный класс исключений, исходя из сообщения об ошибке.

  2. Доверьтесь автозаполнению вашего IDE (редактора кода). Обычно оно предлагает разумные варианты.

  3. Если вы сталкиваетесь с одной и той же проблемой несколько раз, вы естественным образом её запомните.


Обработка исключений – друг отладки

Обработка исключений в Python – это не просто инструмент для предотвращения ошибок, а мощный инструмент для отслеживания ошибок и нахождения их причин.

Сообщения об исключениях обычно выглядят так:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    x = 10 / 0
ZeroDivisionError: division by zero

С них можно узнать имя файла, номер строки и тип ошибки. Таким образом, если хорошо использовать обработку исключений, отладка становится проще.


Дополнительный класс исключений – StopIteration

StopIteration – это исключение, которое возникает, когда итерируемый объект (итератор) больше не может возвращать элементы. Обычно оно обрабатывается автоматически в обычном цикле for, поэтому вам не нужно об этом беспокоиться, но при использовании функции next() иногда вам нужно будет работать с ним вручную.

Пример:

it = iter([1, 2])
print(next(it))  # 1
print(next(it))  # 2
print(next(it))  # Возникновение StopIteration

Или в следующем коде:

try:
    category = next(cat for cat in all_categories if cat.slug == category_slug)
except StopIteration:
    pass  # Ничего не делаем

В этом случае оно используется для того, чтобы пропускать, если категория с данным slug отсутствует. Это минимальная защита от остановки потока кода.


Заключение – Обработка исключений в Python, поначалу сложно, но быстро привыкаешь

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

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


В следующей части мы также обсудим структуру try except else finally для расширенной обработки исключений! 😊