Пример:
class MyCustomError(Exception):
def __init__(self, message, code):
super().__init__(message)
self.code = code
def print_error_details(self):
print(f"Ошибка: {self.args[0]}, Код: {self.code}")
try:
raise MyCustomError("Что-то пошло не так", 500)
except MyCustomError as e:
e.print_error_details()
Для создания собственного исключения в Python и добавления пользовательского метода вывода ошибок, нужно:
Exception
или его подкласса.__str__
(или __repr__
) для базового класса Exception
. Это позволит возвращать строку, описывающую исключение. Внутри этого метода можно вызывать ваш пользовательский метод форматирования.Вот пример:
class CustomError(Exception):
def __init__(self, message, filename=None, line_number=None):
super().__init__(message)
self.filename = filename
self.line_number = line_number
self.message = message # Сохраняем сообщение для доступа
def format_error(self):
error_string = f"Ошибка: {self.message}"
if self.filename:
error_string += f", Файл: {self.filename}"
if self.line_number:
error_string += f", Строка: {self.line_number}"
return error_string
def __str__(self):
return self.format_error()
# Пример использования
try:
raise CustomError("Неверный формат данных", filename="data.txt", line_number=10)
except CustomError as e:
print(e) # Выведет результат работы __str__
print(e.format_error()) # Явный вызов пользовательского метода (эквивалентно предыдущему)
Пояснения:
CustomError
наследуется от Exception
.__init__
принимает сообщение об ошибке и, опционально, имя файла и номер строки. super().__init__(message)
вызывает конструктор родительского класса, передавая ему сообщение.format_error
– это пользовательский метод, формирующий строку с информацией об ошибке. Он использует f-строки для удобного форматирования.__str__
переопределен, чтобы возвращать результат format_error()
. Когда исключение преобразуется в строку (например, при печати), вызывается именно этот метод. Метод __repr__
можно переопределить для другого представления объекта, обычно используемого для отладки.Почему это полезно: