python3自定义异常重写_在现代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

BaseException对于名为message属性有特殊含义似乎很疯狂。 我从PEP-352收集到,该属性确实在2.5中有特殊含义,因此他们想弃用该属性,所以我猜想现在禁止使用该名称(以及一个人)。 啊。

我也模糊地知道Exception有一些魔术参数args ,但是我从来不知道如何使用它。 我也不确定这是前进的正确方法。 我在网上发现的很多讨论都表明他们正在尝试消除Python 3中的args。

更新:有两个答案建议覆盖__init__和__str__ / __unicode__ / __repr__ 。 好像要打很多笔,有必要吗?

#1楼

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值