異常是指程序中的例外,違例情況。異常機制是指程序出現錯誤后,程序的處理方法。當出現錯誤后,程序的執行流程發生改變,程序的控制權轉移到異常處理。
python中使用try...except語句捕獲異常,異常子句定義在try子句后面。try子句中的代碼塊放置可能出現異常的語句,except子句中的代碼塊處理異常,加上else和return語句,便可用來判斷某段代碼是否正常運行,將結果返回。
舉個栗子:
try: file("hello.txt", "r") #如果文件不存在,引發異常 print "讀文件" except IOError: #捕獲IO異常 print "文件不存在" except: #其它異常 print "程序異常"
try也可加上finally語句,finally語句表示無論結果是什么,都執行此語句。栗子:
try: f = open("hello.txt", "r") try: print f.read(5) except: print "讀文件異常" finally: print "釋放資源" f.close() except IOError: print "文件不存在"
舉個實際中使用的例子吧,程序中要求用戶input字符串,字符串是一個嵌套的字典,通過json解讀字符串並從中取值。所以,如果不符合要求的字符串在處理過程中就會報錯導致中斷,那就需要牛掰的try...except...else選手出場了,下面的代碼:
#定義確認用戶輸入格式是否為ha配置文件所需格式函數 def enter_query(add_contect_str): """ :param add_contect_str: 用戶選擇修改配置文件后,輸入的格式必須為字典 :return: Flase=用戶輸入格式不正確 True=用戶輸入格式正確 """ try: #嘗試將用戶輸入字符串轉化為列表,並給變量賦值 add_contect=json.loads(add_contect_str) search_info=add_contect['backend'] weight=add_contect['record']['weight'] server=add_contect['record']['server'] maxconn=add_contect['record']['maxconn'] except: #如果異常,return 值為False return False else: #如果無報錯,return 值為False return True
這樣一個函數,把return值傳給后面的代碼,即使輸入格式錯誤,直接print("格式錯誤")提示用戶就行啦,從而避免了程序中斷。