Исключения и обработка ошибок

6. Исключения и обработка ошибок #

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


6.1. Типы исключений #

Python предоставляет множество встроенных исключений, которые возникают в различных ситуациях.

Примеры встроенных исключений: #

  1. ZeroDivisionError — деление на ноль.

    print(10 / 0)  # ZeroDivisionError
    
  2. ValueError — некорректное значение.

    int("abc")  # ValueError
    
  3. IndexError — обращение к несуществующему индексу.

    my_list = [1, 2, 3]
    print(my_list[5])  # IndexError
    
  4. KeyError — попытка доступа к отсутствующему ключу в словаре.

    my_dict = {"a": 1}
    print(my_dict["b"])  # KeyError
    
  5. 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}")

Рекомендации по обработке исключений #

  1. Обрабатывайте только ожидаемые ошибки — избегайте использования except Exception без необходимости.
  2. Не скрывайте ошибки — предоставляйте пользователю полезные сообщения или журнальте ошибки.
  3. Используйте finally для очистки ресурсов, например, закрытия файлов или соединений.
  4. Создавайте пользовательские исключения для специфических случаев в вашем приложении.

Исключения — мощный инструмент для повышения надежности кода. Правильная обработка ошибок делает программы более устойчивыми и понятными.