在现代Python中声明自定义异常的正确方法?
在现代Python中声明自定义异常类的正确方法是什么?我的主要目标是遵循其他异常类具有的任何标准,以便(例如)我在异常中包含的任何额外字符串都会被捕获异常的任何工具打印出来。
通过“现代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
对于名为 的属性具有特殊含义,这似乎很疯狂。我从PEP-352中收集到,属性在2.5中确实有特殊的含义,他们正试图弃用,所以我想这个名字(而且只是那个名字)现在被禁止了吗?呸。BaseException
message
我也模糊地意识到它有一些神奇的参数,但我从来不知道如何使用它。我也不确定这是未来做事的正确方式。我在网上找到的很多讨论都表明他们试图在Python 3中取消args。Exception
args
更新:两个答案建议覆盖 和 //。这似乎是很多打字,有必要吗?__init__
__str__
__unicode__
__repr__