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

血红的双手。 提交于 2019-11-27 05:24:19

问题


Following is my code:

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

And when i run this, it gives me the TypeError

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

So what kind of type should the test be?


回答1:


The sole argument to raise indicates the exception to be raised. This must be either an exception instance or an exception class (a class that derives from Exception).

Try this:

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



回答2:


You can't raise a str. Only Exceptions can be raised.

So, you're better off constructing an exception with that string and raising that. For example, you could do:

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

OR

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

Hope that helps




回答3:


It should be an exception.

You want to do something like:

raise RuntimeError(test + 'def')

In Python 2.5 and below, your code would work, as then it was allowed to raise strings as exceptions. This was a very bad decision, and so removed in 2.6.



来源:https://stackoverflow.com/questions/11497234/typeerrorexceptions-must-be-old-style-classes-or-derived-from-baseexception-no

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!