網頁

python的例外處理

python的例外處理

當python的程式碼在執行時,若發生語法或程式運算錯誤時,系統就會丟出一個例外(Exception)錯誤,如:

>>> i=0
>>> 10/i
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

>>> whild i<10: print i
  File "<stdin>", line 1
    whild i<10: print i
          ^
SyntaxError: invalid syntax
>>>


上述例子就是當資料型態或語法錯誤時,python 直譯器就會抛出(throw)ZeroDivisionError及SyntaxError的錯誤,如果沒有好好處理,程式就會中斷在此,無法持續進行。

我們可以針對特定的例外錯誤來建立接收錯誤處理的程式區段
>>> try:
...     n=10/0
...     print n
... except ZeroDivisionError:
...     print 'Davided by 0'
...
Davided by 0

此即當我們預期的錯誤發生時,就可以透過事前設計好的規則來處理相對應的錯誤情況。

如果你設計的程式區塊有可能發生許多各種不同的例外情況,你可以使用多個不同的except來處理或是使用else來處理其他沒有處理到的例外狀況。
try:
    readFile=open('testFile.txt','r')
    firstLine=readFile.readline()
    intNum=int(firstLine)
    print intNum
except IOError:
    print 'Error on opening file or reading first line.'
except ValueError:
    print 'Cannot convert first line to integer.'
else:
    print 'Unknow Error'
finally:
    print 'finally....'


若檔案不存在,則會出現

Error on opening file or reading first line.
finally....
>>>

若檔案存在,但內容無法轉換成整數時
Cannot convert first line to integer.
finally....
>>>

如果沒有發生例外,除了會執行出結果外,else的內容也會執行
...
45
Unknow Error
finally....

finally敍述的內容則是不管執行結果正常或是發生例外時,它都會離開try之前執行。


另外,我們也可以將錯誤訊息讀取出來,如:
try:
    readFile=open('testFile1.txt','r')
    firstLine=readFile.readline()
    intNum=int(firstLine)
    print intNum
except Exception as ex:
    print 'Error message is %s'%ex
else:
    print 'Unknow Error'
finally:
    print 'finally....'

...
Error message is [Errno 2] No such file or directory: 'testFile1.txt'
finally....




沒有留言:

張貼留言