问题
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 Exception
s can be raise
d.
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