Python - Обработка исключений
Привет, будущие волшебники Python! Я рад быть вашим гидом в этом увлекательном путешествии по миру обработки исключений в Python. Как человек, который многие годы преподает программирование, я могу вам сказать, что понимание исключений похоже на то, как научиться ездить на велосипеде с подручными: сначала это может показаться сложным, но как только вы освоите это, вы будете ездить без труда!
Что такое исключение?
Перед тем как погружаться в глубины, начнем с основ. Представьте себе, что вы пекете торт (продолжайте следовать мне, я обещаю, это связано с Python!). У вас есть рецепт (ваш код), ингредиенты (ваши данные), и вы готовы начать. Но что, если в середине вы обнаружите, что закончились яйца? Это исключение в мире пекарства!
В Python исключение — это ошибка, которая возникает во время выполнения программы. Это как красный флаг, который появляется и говорит: "Стой! Не все в порядке!"
Посмотрим на простой пример:
print(10 / 0)
Если вы выполните этот код, Python поднимет исключение ZeroDivisionError
. Он говорит: "Эй, вы не можете делить на ноль! Это не разрешается в моей кухне... Я имею в виду, в программировании!"
Обработка исключений в Python
Теперь, когда мы знаем, что такое исключения, давайте научимся обрабатывать их грациозно. В Python мы используем блоки try
и except
для перехвата и обработки исключений.
Вот базовая структура:
try:
# Код, который может вызвать исключение
except ТипИсключения:
# Код для обработки исключения
Поправим наш предыдущий пример:
try:
result = 10 / 0
print(result)
except ZeroDivisionError:
print("Ой! Вы не можете делить на ноль.")
Когда вы выполните этот код, вместо сбоя, он напечатает: "Ой! Вы не можете делить на ноль."
Клауза except без указания исключений
Иногда вы можете захотеть перехватить любое исключение, которое возникает. В этом случае вы можете использовать клаузу except
без указания типа исключения:
try:
# Некоторый рискованный код
x = int(input("Введите число: "))
y = 10 / x
print(y)
except:
print("Что-то пошло не так!")
Это перехватит любое исключение, которое возникает в блоке try
. Однако, обычно лучше перехватывать конкретные исключения, когда это возможно, так как это делает ваш код более точным и легче для отладки.
Клауза except с несколькими исключениями
Вы также можете обработить несколько исключений в одной клаузе except
:
try:
x = int(input("Введите число: "))
y = 10 / x
print(y)
except (ValueError, ZeroDivisionError):
print("Неверный ввод или деление на ноль!")
Этот код перехватит как ValueError
(если пользователь введет нечисловое значение), так и ZeroDivisionError
.
Клауза try-finally
Клауза finally
используется для кода, который должен быть выполнен независимо от того, возникло исключение или нет. Это как команда уборки после вечеринки - она всегда появляется, неimporte как прошла вечеринка!
try:
f = open("example.txt", "r")
# Выполните некоторые операции с файлом
except FileNotFoundError:
print("Файл не существует!")
finally:
f.close() # Это всегда выполнится, даже если возникло исключение
Аргумент исключения
Исключения могут содержать дополнительную информацию. Вы можете получить доступ к этой информации в вашем блоке except
:
try:
x = 10 / 0
except ZeroDivisionError as e:
print(f"Произошла ошибка: {e}")
Это напечатает: "Произошла ошибка: деление на ноль"
Вызов исключения
Иногда вы можете захотеть вызвать исключение сами. Это как быть судьей в игре и засчитать фол:
def check_age(age):
if age < 0:
raise ValueError("Возраст не может быть отрицательным!")
print(f"Ваш возраст {age}")
try:
check_age(-5)
except ValueError as e:
print(e)
Это напечатает: "Возраст не может быть отрицательным!"
Пользовательские исключения
Вы также можете создавать свои собственные типы исключений. Это как изобрести новое правило в игре:
class TooManyPizzasError(Exception):
pass
def order_pizza(number):
if number > 100:
raise TooManyPizzasError("Вы не можете заказать более 100 пицц!")
print(f"Заказ на {number} пицц успешно размещен.")
try:
order_pizza(101)
except TooManyPizzasError as e:
print(e)
Утверждения в Python
Утверждения — это способ убедиться, что определенные условия выполнены. Они похожи на маленькие контрольные точки в вашем коде:
def divide(a, b):
assert b != 0, "Делитель не может быть нулем!"
return a / b
try:
result = divide(10, 0)
except AssertionError as e:
print(e)
Это напечатает: "Делитель не может быть нулем!"
Стандартные исключения
Python поставляется с набором встроенных исключений. Вот некоторые из самых распространенных:
Название исключения | Описание |
---|---|
ZeroDivisionError | Вызывается при делении или взятии остатка от ноля |
ValueError | Вызывается, когда функция получает аргумент правильного типа, но неправильного значения |
TypeError | Вызывается, когда операция или функция применяется к объекту неправильного типа |
NameError | Вызывается, когда локальное или глобальное имя не найдено |
FileNotFoundError | Вызывается, когда запрашиваемый файл или каталог не существует |
IndexError | Вызывается, когда подпись последовательности выходит за пределы диапазона |
KeyError | Вызывается, когда ключ словаря не найден |
ImportError | Вызывается, когда неудачно выполняется оператор импорта |
Итак, вот и все, друзья! Вы только что завершили свой краткий курс по обработке исключений в Python. Помните, исключения — это не ваши враги, это скорее полезные знаки, направляющие вас к лучшему, более надежному коду. Постарайтесь, экспериментируйте, и скоро вы будете обрабатывать исключения как профи. Счастливого кодирования!
Credits: Image by storyset