2016-01-26 61 views

回答

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 

雖然我個人不喜歡它,但它可能更方便,因爲它使得很難捕捉由特定條件引起的異常。

相關問題