1. ホーム
  2. python

[解決済み] エラー例外はBaseExceptionから派生する場合でも、派生しなければならない (Python 2.7)

2022-02-10 03:47:33

質問

以下のコードのどこが問題なのでしょうか(Python 2.7.1環境下)。

class TestFailed(BaseException):
    def __new__(self, m):
        self.message = m
    def __str__(self):
        return self.message

try:
    raise TestFailed('Oops')
except TestFailed as x:
    print x

実行すると、こうなります。

Traceback (most recent call last):
  File "x.py", line 9, in <module>
    raise TestFailed('Oops')
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType

しかし、私には次のように見えます。 TestFailed から派生したものです。 BaseException .

解決方法は?

__new__ staticmethod で、インスタンスを返す必要があります。

代わりに __init__ メソッドを使用します。

class TestFailed(Exception):
    def __init__(self, m):
        self.message = m
    def __str__(self):
        return self.message

try:
    raise TestFailed('Oops')
except TestFailed as x:
    print x