Python - Блок try-except

Привет, будущие мастера Python! Я рад вести вас через увлекательный мир обработки ошибок в Python. Как ваш дружелюбный сосед-преподаватель информатики, я видел множество студентов, которые сталкиваются с ошибками, но не бойтесь! К концу этого урока вы будете обрабатывать исключения как профессионал. Давайте начнем!

Python - try-except Block

Блок try-except в Python

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

Вот базовая структура:

try:
# Код, который может вызвать исключение
except:
# Код для обработки исключения

Давайте рассмотрим простой пример:

try:
number = int(input("Введите число: "))
result = 10 / number
print(f"10 делится на {number} равно {result}")
except:
print("Ой! Что-то пошло не так.")

В этом коде:

  1. Мы просят пользователя ввести число.
  2. Мы пытаемся разделить 10 на это число.
  3. Если что-то пойдет не так (например, вводит ноль или не число), мы перехватываем ошибку и выводим дружественное сообщение.

Попробуйте запустить этот код с разными вводами. Введите 2, затем 0, затем "банану". Как он обрабатывает каждый случай?

Обработка нескольких исключений

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

try:
number = int(input("Введите число: "))
result = 10 / number
print(f"10 делится на {number} равно {result}")
except ValueError:
print("Это не является допустимым числом!")
except ZeroDivisionError:
print("Вы не можете разделить на ноль!")
except:
print("Что-то другое пошло не так.")

Здесь мы обрабатываем три сценария:

  1. Если пользователь вводит что-то, что не является числом (ValueError)
  2. Если пользователь вводит ноль (ZeroDivisionError)
  3. Любые другие непредвиденные ошибки

Запустите этот код с вводами, такими как "пять", 0, 2, и посмотрите, как он реагирует по-разному!

Использование else с блоком try-except

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

try:
number = int(input("Введите положительное число: "))
if number <= 0:
raise ValueError("Это не положительное число!")
result = 10 / number
except ValueError as ve:
print(f"Ошибка: {ve}")
except ZeroDivisionError:
print("Вы не можете разделить на ноль!")
else:
print(f"10 делится на {number} равно {result}")
print("Спасибо за ввод допустимого числа!")

В этом примере:

  1. Мы проверяем, является ли число положительным.
  2. Если нет, мы вызываем наш собственное ValueError.
  3. Если исключений не произошло, блок else выполняется, давая приятное сообщение.

Клауза finally

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

try:
file = open("important_data.txt", "r")
content = file.read()
result = 10 / int(content)
except FileNotFoundError:
print("Файл не существует!")
except ValueError:
print("Файл не содержит допустимого числа!")
except ZeroDivisionError:
print("Число в файле равно нулю!")
else:
print(f"Результат: {result}")
finally:
print("Закрываю файл...")
file.close()

В этом примере:

  1. Мы пытаемся открыть файл и прочитать из него число.
  2. Мы обрабатываем различные возможные ошибки.
  3. Если успешно, мы выводим результат.
  4. Независимо от того, что произошло, мы уверяемся, что файл будет закрыт в блоке finally.

Резюме методов обработки исключений

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

Метод Описание Применение
try Окружает код, который может вызвать исключение Всегда используется с except, else или finally
except Обрабатывает конкретные исключения Перехватывание и обработка ошибок
else Выполняется, если исключений не произошло в блоке try Выполнение кода, который должен выполняться только при успешном try
finally Всегда выполняется, независимо от исключений Операции по очистке (например, закрытие файлов)
raise Вызывает исключение вручную Создание пользовательских ошибочных условий

Помните, что хорошая обработка ошибок - это как носить ремень безопасности: он может показаться ненужным, пока вы действительно не понадобитесь! Практикуйте эти концепции, и скоро вы будете писать надежные, устойчивые к ошибкам коды на Python как профессионал.

Счастливого кодирования, и愿 ваши исключения всегда обрабатываться грациозно!

Credits: Image by storyset