web-dev-qa-db-ja.com

TypeError:exceptionsは古いスタイルのクラスであるか、strではなくBaseExceptionから派生している必要があります

以下は私のコードです:

test = 'abc'
if True:
    raise test + 'def'

これを実行すると、TypeErrorが表示されます

TypeError: exceptions must be old-style classes or derived from BaseException, not str

では、どのような種類のtestにすべきでしょうか?

43
2342G456DI8

発生する唯一の引数は、発生する例外を示します。これは、例外インスタンスまたは例外クラス(Exceptionから派生したクラス)でなければなりません。

これを試して:

test = 'abc'
if True:
    raise Exception(test + 'def')
56
user1393258

raise a strはできません。 Exceptionsにできるのはraisesだけです。

したがって、その文字列を使用して例外を構築し、それを発生させる方が良いでしょう。たとえば、次のことができます。

test = 'abc'
if True:
    raise Exception(test + 'def')

OR

test = 'abc'
if True:
    raise ValueError(test + 'def')

役立つことを願っています

35
inspectorG4dget

例外であるべきです。

あなたは次のようなことをしたい:

raise RuntimeError(test + 'def')

Python 2.5以下では、例外として文字列を発生させることが許可されていたため、コードは機能します。これは非常に悪い決定であったため、2.6で削除されました。

16
Abe Karplus