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

raise 的唯一参数表示要引发的异常。这必须是异常实例或异常类(从 Exception 派生的类)。

试试这个:

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

你不能raise一个str. 只有Exceptions 可以是raised。

所以,你最好用那个字符串构造一个异常并引发它。例如,您可以这样做:

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 回答