Классы исключений. Создание собственных исключений

Классы ошибок

Все ошибки в Python наследуются от класса BaseException. Некоторые еще наследуются от Exception

Список ошибок

Ошибка Описание
ArithmeticError Арифметическая ошибка.
AssertationError Ложное выражение в функции assert ложно
AttributeError Обращение к несуществующему атрибуту
BlockingIOError Исключение, которое возникает в Python при попытке выполнить операцию ввода-вывода на заблокированном сокете.
BrokenPipeError Возникает при использовании сокетов. Эта ошибка происходит, когда соединение с сервером разрывается.
BufferError Операция с буфером не может быть выполнена
ChildProcessError Ошибка при операции с дочерним процессом
ConnectionAbortedError Еще одна ошибка, возникающая при разрыве соединения с сервером
ConnectionError Исключения, связанные с подключением
ConnectionRefusedError Возникает, когда подключение к удаленному серверу отклонено
ConnectionResetError Возникает, когда удаленный сервер неожиданно закрывает соединение.
EOFError Программа дошла до конца файла и не смогла прочитать желаемое
FileExistsError Попытка создать существующий файл или каталог
FileNotFoundError Файл или каталог не найден
FloatingPointError Исключение, вызываемое при неправильной операции с float
GeneratorExit Вызывается при закрытии объекта generator с помощью метода close
ImportError Невозможно импортировать модуль
IndentationError Неверные отступы
IndexError Индекс не входит в диапазон элементов
InterruptedError Cистемный вызов прерван входящим сигналом
IsADirectoryError Передана директория вместо файла
KetboardInterrupt Исключение, вызываемое при прерывании программы
KeyError Несуществующий ключ
LookupError Нет элемента по индексу или ключу
MemoryError Недостаточно памяти
NameError Нет переменной
NotADirectoryError Передан файл вместо директории
NotImplementedError Абстрактные методы класса не реализованы
OSError Ошибка операционной системы
OverflowError Исключение, возникающее когда результат операции слишком велик
PermissionError Нет прав доступа
ProcessLookupError Нет переданного процесса
ReferenceError Попытка получить доступ к атрибуту со слабой ссылкой
RuntimeError Исключение, которое возникает во время выполнения программы, когда происходит какая-то ошибка, не покрываемая другими специфическими исключениями
StopIteration Вызывается, если вызван метод next итерируемого объекта, а в нем не осталось элементов
SyntaxError Ошибка синтаксиса
SystemError Внутренняя ошибка
SystemExit Исключение, которое вызывает функция sys.exit() при выходе из программы
TabError Смешивание пробелов и табов в отступах
TimeoutError Превышено время ожидания
TypeError Неправильный тип
UnboundLocalError Ссылка на несуществующую локальную переменную внутри функции
UnicodeDecodeError Исключение, связанное с декодированием unicode.
UnicodeEncodeError Исключение, связанное с кодированием unicode.
UnicodeError Ошибка, связанная с кодированием / декодированием unicode в строках.
UnicodeTranslateError Исключение, связанное с переводом unicode.
ValueError Некорректное значение
ZeroDivisionError Деление на ноль

Создание собственных классов исключений

Пользовательские исключения наследуются от класса Exception. Самое простое исключение выглядит так:

class MyCustomError(Exception):
    pass

raise MyCustomError()

И его вывод такой:

Traceback (most recent call last):
  File "D:\python_projects\test\main.py", line 7, in <module>
    raise MyCustomError()
MyCustomError

Такое исключение не особо информативно. Давайте это исправим, добавив метод __str__:

class MyCustomError(Exception):
    def __str__(self):
        return 'Вызвана ошибка MyCustomeError'


raise MyCustomError()

Теперь так:

Traceback (most recent call last):
  File "D:\python_projects\test\main.py", line 6, in <module>
    raise MyCustomError()
MyCustomError: Вызвана ошибка MyCustomerError

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

class MyCustomError(Exception): 
    def __init__(self, message=''): 
        self.message = message or None

    def __str__(self):
        return f'Вызвана ошибка MyCustomerError, {self.message if self.message else ''}'


# выдача MyCustomError
raise MyCustomError('аргумент передан')

Сейчас вывод такой:

Traceback (most recent call last):
  File "D:\python_projects\test\main.py", line 10, in <module>
    raise MyCustomError('аргумент передан')
MyCustomError: Вызвана ошибка MyCustomerError, аргумент передан


ООП. Введение в объектно-ориентированное программирование в Python

Объектно-ориентированное программирование - одна из самых распространенных парадигм. Знание ООП позволит сделать код более гибким и масштабируемым

Модули в языке Python. Разбиение программ на модули. Установка сторонних библиотек

Для написания сложных программ необходимо использовать сторонние библиотеки. Они позволяют использовать готовый функционал. Также можно использовать модули для компоновки вашего приложения.

Pattern matching в Python - конструкция match case

В Python 3.10 был добавлен новый функционал - сопоставление с шаблонами с помощью ключевых слов match и case. В статье также рассматривается производительность match/case по сравнению с if/else.

Обработка исключений. Конструкция try/except/finally

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