問題是,這不是在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
雖然我個人不喜歡它,但它可能更方便,因爲它使得很難捕捉由特定條件引起的異常。