Поднятие исключений в Python

PythonBeginner
Практиковаться сейчас

Введение

Добро пожаловать в Арканный Академический Колледж Эк셉шнального Кодирования - престижный учебное заведение, где собираются только самые способные мастера кодирования, чтобы отточить свои навыки. Вы - молодой маг, который недавно поступил в академию и попал в мир волшебных алгоритмов и сложных заклинаний, где всегда предстоит новая задача.

Ваше путешествие начинается под руководством Мастера Питхо, известного Компетиторского Мастера Заклинания, который везде в магических мирах славится своими выдающимися способностями в решении задач и глубокими знаниями питоновской магии. В Академии каждый маг должен изучить искусство заклинания, но то, что делает магов действительно сильными, - это способность предвидеть и управлять непредвиденным.

Сегодня Мастер Питхо научит вас древнему искусству Генерации Исключений - фундаментальной навыке для любого начинающего мага, позволяющего контролировать ход магии (кода) и создавать безопасные резервы от неожиданных ошибок, которые могут возникнуть во время заклинания (программирования).

Цель этого Лаба - научить вас писать надежный питоновский код, способный правильно обрабатывать и генерировать исключения, обеспечивая тем самым, чтобы ваши заклинания (программы) были не только мощными, но и устойчивыми и безопасными. Приготовьтесь, так как вы собираетесь отправиться в волшебное путешествие по миру питоновского Генерирования Исключений!

Основы понимания исключений

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

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

Откройте файл с именем spellcasting.py в каталоге ~/project с содержанием:

## spellcasting.py

def divide_potions(potions, wizards):
    return potions / wizards

## An attempt to divide potions among zero wizards, which will raise an exception.
divide_potions(10, 0)

Запустите скрипт с помощью команды:

python3 ~/project/spellcasting.py

Вы увидите, что Python генерирует исключение ZeroDivisionError. В следующем разделе вы узнаете, как правильно обработать это исключение:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(10, 0)
  File "/home/labex/project/spellcasting.py", line 4, in divide_potions
    return potions / wizards
ZeroDivisionError: division by zero

Генерация собственных исключений

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

В этом разделе вы измените скрипт spellcasting.py, чтобы генерировать собственное исключение Exception, когда передается неправильное количество магicians в функцию divide_potions.

Во - первых, измените функцию divid_potions в spellcasting.py соответственно:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Нельзя разделить зелья между нулевым количеством магicians!")
    return potions / wizards

## Попробуйте снова разделить зелья с намеренной ошибкой.
divide_potions(20, 0)

После сохранения изменений запустите снова измененный скрипт:

python3 ~/project/spellcasting.py

На этот раз Python сгенерирует собственное сообщение об исключении Exception:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(20, 0)
  File "/home/labex/project/spellcasting.py", line 3, in divide_potions
    raise Exception("Нельзя разделить зелья между нулевым количеством магicians!")
Exception: Нельзя разделить зелья между нулевым количеством магicians!

Обработка исключений с использованием try-except

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

Добавьте блок try-except вокруг вызова функции divide_potions в скрипте spellcasting.py:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Нельзя разделить зелья между нулевым количеством магicians!")
    return potions / wizards

try:
    ## Попробуйте разделить зелья и обработайте возможные ошибки.
    result = divide_potions(30, 0)
    print(f"Каждый маг получает {result} зелий.")
except Exception as e:
    print(f"Заклинание не удалось: {e}")

Запустите это в оболочке:

python3 ~/project/spellcasting.py

Теперь, при запуске скрипта вместо аварийного завершения он выведет:

Заклинание не удалось: Нельзя разделить зелья между нулевым количеством магicians!

Резюме

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

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

Пусть код будет с вами, молодой колдун.