50

以下は私のコードです:

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

そして、これを実行すると、TypeError

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

では、どのようなタイプである必要がありtestますか?

4

3 に答える 3

64

発生させる唯一の引数は、発生する例外を示します。これは、例外インスタンスまたは例外クラス (Exception から派生したクラス) のいずれかである必要があります。

これを試して:

test = 'abc'
if True:
    raise Exception(test + 'def')
于 2012-07-17T03:25:59.723 に答える
36

できませんraise。s だけがstrdになることができます。Exceptionraise

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

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

また

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

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

于 2012-07-16T01:52:17.987 に答える
17

それは例外であるべきです。

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

raise RuntimeError(test + 'def')

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

于 2012-07-16T01:50:22.383 に答える