Найти в Дзене
Креативный дизайн

Искусство Исключений: Намеренный Вызов Исключений в Python с Оператором Raise

Когда вы пишете код на Python, особенно если он становится сложным, возникает необходимость обработать различные ситуации, которые могут возникнуть в процессе выполнения программы. Воспользуемся современным подходом к управлению потоком выполнения — исключениями. Тем более, что оператор raise в Python является особым инструментом, который позволяет программистам намеренно вызывать исключения. Но зачем и когда это делать? Иногда вам требуется остановить выполнение программы, указав на какие-либо условия или критические ошибки, которые не могут быть обработаны внутри программного потока. Например, если функция не может корректно завершиться с допустимыми значениями или если в ходе выполнения программы происходят непредвиденные обстоятельства, которые она не может корректно обработать. В этот момент на сцену выходит оператор raise. Намеренный вызов исключений, например, для экстренной остановки работы программы, осуществляется с помощью оператора raise. На программистском сленге про rais
Оглавление

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

Но зачем и когда это делать?

Что такое намеренный вызов исключений?

Иногда вам требуется остановить выполнение программы, указав на какие-либо условия или критические ошибки, которые не могут быть обработаны внутри программного потока. Например, если функция не может корректно завершиться с допустимыми значениями или если в ходе выполнения программы происходят непредвиденные обстоятельства, которые она не может корректно обработать. В этот момент на сцену выходит оператор raise.

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

Что делает оператор raise?

На программистском сленге про raise иногда говорят «бросить исключение». Это точно описывает его действие: выполнение кода прерывается и возникает исключительная ситуация. Исключение можно перехватить и обработать в другом месте кода, либо программа может завершить свою работу, если исключение не поймано.

Простой Пример Вызова Исключений

Давайте рассмотрим простой пример использования оператора raise:

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

def divide_numbers(a, b):
if b == 0:
raise ValueError("Деление на ноль невозможно.")
return a / b

# Вызов функции
result = divide_numbers(10, 0)

Разбор кода:

  1. def divide_numbers(a, b): — определяется функция divide_numbers, которая принимает два аргумента: a и b.
  2. if b == 0: — проверяется, равняется ли делитель нулю.
  3. raise ValueError("Деление на ноль невозможно.") — если делитель b равен нулю, программа намеренно "бросает" исключение ValueError с сообщением "Деление на ноль невозможно".
  4. result = divide_numbers(10, 0) — вызывается функция с параметрами, где делитель равен нулю. В этом случае выполнение программы прерывается исключением.

Результат работы кода:

-3

Проброс ошибок

Простейший случай проброса ошибок — это когда в одном месте кода мы обрабатываем исключения, чтобы записать их в лог или выдать более информативную ошибку, однако для действительного же исправления ошибка должна быть передана на более высокий уровень кода. Это называется пробросом (raising) исключения.

Пример задачи про проброс ошибок:

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

def validate_age(age):
try:
if age < 0:
raise ValueError("Возраст не может быть отрицательным.")
except ValueError as e:
print(f"Запись ошибки в лог: {e}")
raise

try:
validate_age(-5)
except ValueError as e:
print(f"Ошибка перехвачена в вызывающем коде: {e}")

Результат работы кода:

-5

Расшифровка каждой строчки кода:

  1. def validate_age(age): — Определяется функция validate_age, которая принимает один аргумент age.
  2. try: — Начинается блок try, который используется для отлова исключений. В этом блоке будет находиться код, который может вызвать исключение.
  3. if age < 0: — Проверяется условие: если значение переменной age меньше нуля.
  4. raise ValueError("Возраст не может быть отрицательным.") — Если условие age < 0 истинно, возбуждается исключение ValueError с сообщением "Возраст не может быть отрицательным."
  5. except ValueError as e: — Начинается блок except, который перехватывает исключения типа ValueError. Исключение сохраняется в переменной e.
  6. print(f"Запись ошибки в лог: {e}") — Печатается сообщение в консоль, сообщающее о записи ошибки в лог. Сообщение включает текст исключения, который находится в переменной e.
  7. raise — Исключение, которое было перехвачено в блоке except, снова возбуждается. Это позволяет ему быть перехваченным в другом месте программы.
  8. try: — Начинается новый блок try, в котором вызывается функция validate_age.
  9. validate_age(-5) — Вызывается функция validate_age с аргументом -5. Это значение вызывается с намерением проверить, распознает ли функция отрицательное значение как ошибочное.
  10. except ValueError as e: — Перехватывается исключение ValueError, если оно возникает в предыдущем try блоке. Исключение сохраняется в переменной e.
  11. print(f"Ошибка перехвачена в вызывающем коде: {e}") — Печатается сообщение в консоль о том, что ошибка была перехвачена в вызывающем коде. Сообщение включает текст исключения, который находится в переменной e.

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

Рекомендации по использованию оператора raise

  1. Быть Специфичным: Используйте конкретные типы исключений, когда это возможно (например, ValueError, TypeError), чтобы другие программисты или пользователи могли лучше понять причину ошибки.
  2. Документирование: Включение полезных сообщений об ошибках помогает быстрее исправлять ошибки и понимать их причину.
  3. Проброс исключений: не бойтесь пробрасывать исключения, если ошибка должна быть исправлена на более высоком уровне.
  4. Помните о производительности: частое создание и обработка исключений может замедлить выполнение программы.

Заключение

Оператор raise является мощным инструментом в арсенале каждого Python-разработчика, позволяя намеренно прерывать выполнение программы и сигнализировать об ошибках. Применяйте его с умом, чтобы улучшить ясность и контроль за вашим кодом. Используйте raise, чтобы заблаговременно сообщать о потенциальных проблемах и облегчить их отслеживание и устранение.

Искусство работы с исключениями требует осторожности и продуманности, но навыки, полученные при понимании и использовании raise, стоят приложенных усилий. Так что не бойтесь "бросать исключения" — только пусть они будут конструктивными и полезными.

ПОЛЕЗНЫЕ РЕСУРСЫ:

---------------------------------------------------

Сообщество дизайнеров в VK

https://vk.com/grafantonkozlov

Телеграмм канал сообщества

https://t.me/grafantonkozlov

Архив эксклюзивного контента

https://boosty.to/antonkzv

Канал на Дзен

https://dzen.ru/grafantonkozlov

---------------------------------------------------

Бесплатный Хостинг и доменное имя

https://tilda.cc/?r=4159746

Мощная и надежная нейронная сеть Gerwin AI

https://t.me/GerwinPromoBot?start=referrer_3CKSERJX

GPTs — плагины и ассистенты для ChatGPT на русском языке

https://gptunnel.ru/?ref=Anton

---------------------------------------------------