TypeError:exception必须是旧式类或派生自BaseException,而不是str

时间:2012-07-16 01:48:55

标签: python typeerror raise

以下是我的代码:

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

当我运行它时,它会给我TypeError

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

那么test应该是什么类型的?

3 个答案:

答案 0 :(得分:56)

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

试试这个:

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

答案 1 :(得分:35)

你不能raise一个str。只有Exception可以是raise d。

所以,你最好用该字符串构造一个异常并提高它。例如,你可以这样做:

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

OR

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

希望有所帮助

答案 2 :(得分:16)

这应该是一个例外。

你想做类似的事情:

raise RuntimeError(test + 'def')

在Python 2.5及更低版本中,您的代码可以正常工作,因为它允许将字符串作为异常引发。这是一个非常糟糕的决定,因此在2.6中删除。