linux下python學習筆記(十八)

首先介紹錯誤。

假如你的程序中有一些無效的語句,會怎麼樣呢?Python會引發並告訴你那裏有一個錯誤,從而處理這樣的情況。

考慮一個簡單的print語句。假如我們把print誤拼爲Print,注意大寫,這樣Python會 引發 一個語法錯誤。

 try..except
我們嘗試讀取用戶的一段輸入。按Ctrl-d,看一下會發生什麼。

 

Python引發了一個稱爲EOFError的錯誤,這個錯誤基本上意味着它發現一個不期望的 文件尾(由Ctrl-d表示)

處理異常
我們可以使用try..except語句來處理異常。我們把通常的語句放在try塊中,而把我們的錯誤處理語句放在except塊中。

#!/usr/bin/python
# Filename: try_except.py
import sys
try:
  s = raw_input('Enter something --> ')
except EOFError:
  print '\nWhy did you do an EOF on me?'
  sys.exit() # exit the program
except:
  print '\nSome error/exception occurred.'
  # here, we are not exiting the program
print 'Done'

我們把所有可能引發錯誤的語句放在try塊中,然後在except從句/塊中處理所有的錯誤和異常。except從句可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤/異常。如果沒有給出錯誤或異常的名稱,它會處理 所有的 錯誤和異常。對於每個try從句,至少都有一個相關聯的except從句。

引發異常

你可以使用raise語句 引發 異常。你還得指明錯誤/異常的名稱和伴隨異常 觸發的 異常對象。你可以引發的錯誤或異常應該分別是一個Error或Exception類的直接或間接導出類。

#!/usr/bin/python
# Filename: raising.py
class ShortInputException(Exception):
   '''A user-defined exception class.'''
   def __init__(self, length, atleast):
       Exception.__init__(self)
       self.length = length
       self.atleast = atleast
try:
  s = raw_input('Enter something --> ')
  if len(s) < 3:
        raise ShortInputException(len(s), 3)
# Other work can continue as usual here
except EOFError:
     print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
     print 'ShortInputException: The input was of length %d, \
        was expecting at least %d' % (x.length, x.atleast)
else:
   print 'No exception was raised.'

try..finally

假如你在讀一個文件的時候,希望在無論異常發生與否的情況下都關閉文件,該怎麼做呢?這可以使用finally塊來完成。注意,在一個try塊下,你可以同時使用except從句和finally塊。如果你要同時使用它們的話,需要把一個嵌入另外一個。

#!/usr/bin/python
# Filename: finally.py
import time
try:
  f = file('poem.txt')
  while True: # our usual file-reading idiom
    line = f.readline()
    if len(line) == 0:
       break
    time.sleep(2)
    print line,
finally:
  f.close()
  print 'Cleaning up...closed the file'

我們進行通常的讀文件工作,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣做的原因是讓程序運行得慢一些(Python由於其本質通常運行得很快)。在程序運行的時候,按Ctrl-c中斷/取消程序。
我們可以觀察到KeyboardInterrupt異常被觸發,程序退出。但是在程序退出之前,finally從句仍然被執行,把文件關閉

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章