以下python 2.7.10中的代码
{{1}}
当我运行它时,它会给我TypeError:
TypeError:异常必须是旧式类或派生自BaseException,而不是str
答案 0 :(得分:0)
问题在于,这不是Python中引发异常的方式。您raise
派生自BaseException
的对象(通常它来自built-in exception types之一。因此,您的示例将按照以下方式重新编写:
class BadNumberError(ValueError):
pass
def inputnumber():
x = input('Pick a number: ')
if x == 17:
raise BadNumberError('17 is a bad number')
return x
结果是:
[/home/.../Python/demos]$ python2.7 exception_demo.py
Pick a number: 17
Traceback (most recent call last):
File "exception_demo.py", line 11, in <module>
print(inputnumber())
File "exception_demo.py", line 7, in inputnumber
raise BadNumberError('17 is a bad number')
__main__.BadNumberError: 17 is a bad number
[/home/.../Python/demos]$ python2.7 exception_demo.py
Pick a number: 18
18
需要注意的一点是,看到人们直接使用内置异常类型的实例是非常共同的,例如:
def inputnumber():
x = input('Pick a number: ')
if x == 17:
raise ValueError('17 is a bad number')
return x
它可能更方便,但我个人并不喜欢它,因为它很难捕捉到由特定条件引起的异常。