以下是我的代码:
test = 'abc'
if True:
raise test + 'def'
当我运行它时,它会给我TypeError
TypeError: exceptions must be old-style classes or derived from BaseException, not str
那么test
应该是什么类型的?
答案 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中删除。