1. ホーム
  2. python

[解決済み] Python 2.6で非推奨となったBaseException.message

2022-04-20 21:41:01

質問

以下のユーザー定義例外を使用すると、Python 2.6 で BaseException.message が非推奨になったという警告が表示されます。

class MyException(Exception):

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

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

これは警告です。

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以降)では、カスタム例外クラスはExceptionから継承することになっています。 Python 2.5 からは を継承しています。その背景は、以下のサイトで詳しく説明されています。 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__ は、すでに意味のある形で実装されています。 特に、(メッセージとして使用可能な)1つのアーギュメントのみの場合。

を繰り返す必要はありません。 __str__ または __init__ の実装または作成 _get_message を、他の方が提案されているように