6. Исключения и обработка ошибок #
Исключения в Python используются для обработки ошибок, возникающих во время выполнения программы. Это позволяет избегать аварийного завершения программы и корректно реагировать на ошибки.
6.1. Типы исключений #
Python предоставляет множество встроенных исключений, которые возникают в различных ситуациях.
Примеры встроенных исключений: #
ZeroDivisionError
— деление на ноль.print(10 / 0) # ZeroDivisionError
ValueError
— некорректное значение.int("abc") # ValueError
IndexError
— обращение к несуществующему индексу.my_list = [1, 2, 3] print(my_list[5]) # IndexError
KeyError
— попытка доступа к отсутствующему ключу в словаре.my_dict = {"a": 1} print(my_dict["b"]) # KeyError
TypeError
— несоответствие типов.print("5" + 5) # TypeError
Полный список исключений доступен в документации Python.
6.2. Обработка исключений (try, except, finally) #
Конструкция try-except
#
try:
num = int(input("Введите число: "))
print(f"Вы ввели число {num}")
except ValueError:
print("Ошибка: введено не число.")
Обработка нескольких исключений #
try:
result = 10 / int(input("Введите число: "))
print(result)
except ZeroDivisionError:
print("Ошибка: деление на ноль.")
except ValueError:
print("Ошибка: введено не число.")
Обработка любых исключений #
try:
x = 1 / 0
except Exception as e:
print(f"Произошла ошибка: {e}")
Конструкция finally
#
Блок finally
выполняется в любом случае: произошла ошибка или нет.
try:
file = open("data.txt", "r")
data = file.read()
except FileNotFoundError:
print("Файл не найден.")
finally:
file.close()
Конструкция else
#
Блок else
выполняется, если ошибок не произошло.
try:
result = 10 / 2
except ZeroDivisionError:
print("Ошибка деления на ноль.")
else:
print(f"Результат: {result}")
6.3. Пользовательские исключения #
Вы можете создавать свои классы исключений, унаследовав их от Exception
.
Создание пользовательского исключения #
class CustomError(Exception):
"""Мое пользовательское исключение"""
def __init__(self, message):
self.message = message
# Использование
try:
raise CustomError("Это пользовательская ошибка")
except CustomError as e:
print(f"Ошибка: {e.message}")
Пример с проверкой ввода #
class NegativeNumberError(Exception):
"""Ошибка: число меньше нуля"""
def __init__(self, value):
self.value = value
try:
num = int(input("Введите положительное число: "))
if num < 0:
raise NegativeNumberError(num)
except NegativeNumberError as e:
print(f"Ошибка: введено отрицательное число {e.value}")
Рекомендации по обработке исключений #
- Обрабатывайте только ожидаемые ошибки — избегайте использования
except Exception
без необходимости. - Не скрывайте ошибки — предоставляйте пользователю полезные сообщения или журнальте ошибки.
- Используйте
finally
для очистки ресурсов, например, закрытия файлов или соединений. - Создавайте пользовательские исключения для специфических случаев в вашем приложении.
Исключения — мощный инструмент для повышения надежности кода. Правильная обработка ошибок делает программы более устойчивыми и понятными.