Сообщить об ошибке.

Создание пользовательских исключений в Python.

Исключения, определяемые пользователем.

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

Можно определить классы исключений, которые делают все, что может сделать любой другой класс. Пользовательские классы исключений обычно просты, часто предлагая только ряд атрибутов, которые позволяют извлекать информацию об ошибке для исключения.

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

Например:

class Error(Exception):
    """Базовый класс для исключений в этом модуле."""
    pass

class InputError(Error):
    """Исключение для ошибок во входных данных.
    Attributes:
        expression -- выражение, в котором произошла ошибка
        message -- объяснение ошибки
    """
    def __init__(self, expression, message):
        self.expression = expression
        self.message = message


x = input("Ведите положительное целое число: ")
try:
    x = int(x)
    if x < 0:
        raise InputError(f'!!! x = input({x})', 
                         '-> Допустимы только положительные числа.')
except ValueError:
    print("Error type of value!")
except InputError as e:
    print(e.args[0])
    print(e.args[1])
else:
    print(x)


# Ведите положительное целое число: 3
# 3

# Ведите положительное целое число: 7.9
# Error type of value!

# Ведите положительное целое число: -5
# !!! x = input(-5)
# -> Допустимы только положительные числа.

У объектов класса исключений Exception и производных от него, определен метод __str__() так, чтобы выводить значения атрибутов. Поэтому можно не обращаться напрямую к полям объекта: e.expression и e.message. Кроме того у экземпляров класса исключений Exception есть атрибут args. Через него можно получать доступ к отдельным полям, как показано в примере выше.

Большинство исключений определяются именами, которые заканчиваются на "Error", аналогично именованию стандартных исключений.

Многие стандартные модули определяют свои собственные исключения для сообщений об ошибках, которые могут возникать в определяемых ими функциях. Более подробная информация о классах представлена в разделе "Классы в Python"