Python 2.6中弃用了BaseException.message

问题:

当我使用以下用户定义的异常时,我会发现在Python 2.6中不推荐使用BaseException.message:

class MyException(Exception):

    def __init__(self, message):
        self.message = message

    def __str__(self):
        return repr(self.message)

这是警告:
class=”lang-none prettyprint-override”>

DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
self.message = message

这是怎么回事?我必须改变什么才能摆脱弃用警告?

回答:

解决方案 – 几乎不需要编码

只需从Exception继承你的异常类,并将消息作为第一个参数传递给构造函数
例:

class MyException(Exception):
    """My documentation"""

try:
    raise MyException('my detailed description')
except MyException as my:
    print my # outputs 'my detailed description'

您可以使用str(my)或(较不优雅)my.args[0]访问自定义消息。

背景

在较新版本的Python(2.6版)中,我们应该从(starting from Python 2.5)继承自BaseException的Exception继承自定义的异常类。背景在PEP 352中详细描述

class BaseException(object):

    """Superclass representing the base of the exception hierarchy.
    Provides an 'args' attribute that contains all arguments passed
    to the constructor.  Suggested practice, though, is that only a
    single string argument be passed to the constructor."""

 __str____repr__已经以有意义的方式实施,
特别是对于只有一个arg(可以用作消息)的情况。
您不需要按照其他人的建议重复__str____init__实施或创建_get_message

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: BaseException.message deprecated in Python 2.6

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 + 1 =