Правильный способ объявления пользовательских исключений в современном Python?Python

Программы на Python
Anonymous
Правильный способ объявления пользовательских исключений в современном Python?

Сообщение Anonymous »

Как правильно объявлять собственные классы исключений в современном Python? Моя основная цель — следовать всем стандартам, которые есть в других классах исключений, чтобы (например) любая дополнительная строка, которую я включаю в исключение, печаталась любым инструментом, поймавшим исключение.
By " современный Python» я имею в виду что-то, что будет работать в Python 2.5, но будет «правильным» для способа ведения дел в Python 2.6 и Python 3.*. Под «пользовательским» я подразумеваю объект Exception, который может включать дополнительные данные о причине ошибки: строку, а также, возможно, какой-либо другой произвольный объект, относящийся к исключению.
Меня сбило с толку следующее предупреждение об устаревании Python 2.6.2:

Код: Выделить всё

>>> class MyError(Exception):
...     def __init__(self, message):
...         self.message = message
...
>>> MyError("foo")
_sandbox.py:3: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
Кажется безумием, что BaseException имеет особое значение для атрибутов с именем message. Из PEP-352 я понял, что этот атрибут имел особое значение в версии 2.5, которую они пытаются исключить, поэтому я думаю, что это имя (и только оно) теперь запрещено? Ух.
Я также смутно осознаю, что у Exception есть некоторые магические аргументы параметров, но я никогда не знал, как их использовать. Я также не уверен, что это правильный способ действий в будущем; во многих обсуждениях, которые я нашел в Интернете, говорилось, что они пытались покончить с аргументами в Python 3.
Обновление: в двух ответах предлагалось переопределить __init__ и __str__/__unicode__/__repr__. Кажется, что нужно много печатать, это необходимо?

Подробнее здесь: https://stackoverflow.com/questions/131 ... ern-python

Вернуться в «Python»