Обработка исключений в Python

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Однажды ночью вы оказываетесь перед древним дубом, его листья мерцают нежным свечением. Именно здесь, в сердце леса, вы узнаете секреты Ментора. Ваша цель — овладеть таинственным искусством ловить исключения в Python, чтобы ваши заклинания не прерывались, даже если случится что-то непредвиденное.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-271525{{"Обработка исключений в Python"}} end

Идентификация потенциальных проклятий

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

Откройте файл под названием potion_dividing.py в папке ~/project и добавьте следующий код:

def divide_potions(total_potions, vial_count):
    return total_potions / vial_count

## Попытка разделить 10 зелий на 2 флакона
print(divide_potions(10, 2))

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

python ~/project/potion_dividing.py

Вы должны увидеть вывод:

5.0

Это означает успешное разделение зелий.

Теперь измените скрипт potion_dividing.py, чтобы включить рискованный случай с заклинанием.

print(divide_potions(10, 0))  ## Это заклинание опасно и его нужно обработать!

Вы должны увидеть вывод:

Traceback (most recent call last):
  File "/home/labex/project/potion_dividing.py", line 6, in <module>
    print(divide_potions(10, 0))
  File "/home/labex/project/potion_dividing.py", line 2, in divide_potions
    return total_potions / vial_count
ZeroDivisionError: division by zero

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

Создание защитного заклинания

После того, как вы испытали проклятие от деления на ноль, настало время создать защитное заклинание с использованием инструкций try и except. Обновите скрипт potion_dividing.py, чтобы включить защиту от таких катастрофических исходов.

def divide_potions(total_potions, vial_count):
    try:
        return total_potions / vial_count
    except ZeroDivisionError:
        return "Колдун никогда не делит на ноль!"

## Попытка безопасного разделения зелий
print(divide_potions(10, 2))
print(divide_potions(10, 0))  ## Теперь это не должно вызывать проклятие

Запустите снова улучшенный скрипт в терминале с помощью команды:

python ~/project/potion_dividing.py

Теперь ваш код должен грамотно обрабатывать исключение, и вместо ошибки он выведет предупреждающее сообщение:

5.0
Колдун никогда не делит на ноль!

Резюме

В этом практическом задании мы прошли по тёмным областям исключений в Python в фэнтезийном设定е с лесом. Мы изучили, как определить потенциальные ошибки и как создавать защитные заклинания (try/except блоки), чтобы защитить наш код от неожиданных бедствий, не нарушая потока выполнения программы.

По окончании нашего путешествия мы не только столкнулись с ошибкой ZeroDivisionError, но и освоили метод предотвратить её хаос, сделав наш код более устойчивым и менее восприимчивым к вмешательству внешних факторов.

Продолжая свои приключения в программировании, помните слова Магического Ментора Духа Леса: "Мудрый колдун всегда ожидает неожиданного и защищает своё заклинание защитным условием".