一、python中的異常案例
python
1.1 NameError: 嘗試訪問一個未定義/未申明的變量程序員
1.2 ZeroDivisionError: 除數爲0安全
1.3 SyntaxError: 語法錯誤測試
1.4 IndexError: 請求的索引超過序列範圍
ui
1.5 Keyerror: 不存在的字典關鍵字
this
1.6 IOError: 輸入輸出錯誤,相似打開一個不存在的文件時會引起此類錯誤code
1.7 AttributeError: 訪問未知的對象屬性或方法對象
2. 檢測和處理異常
索引
2.1 try-except 語句utf-8
最多見的try-except語句由try塊和except塊構成,語法以下
try: try_suite #監控這裏發生的異常 except Exception[,reason]: except_suite #發生指定的異常後在這裏處理,執行此處代碼
實例:
2.2 能夠把多個except語句鏈接在一塊兒,處理一個try語句塊可能發生的多種異常。這種狀況下,首先嚐試 try 子句,若是沒有異常就跳過全部 except 從句繼續執行;不然,在多個 except 子句中查找匹配的異常執行相應語句,若找不到匹配異常,則中斷執行拋出錯誤。
2.3 咱們還能夠在一個 except 語句裏處理任意多個異常,只須要把它們放進一個元組裏。
2.4 有部分錯誤並非因爲錯誤條件引發,而是因爲系統緣由,好比用戶按下 CTRl-C 退出 python 引起的KeyboardInterupt。若是捕獲全部異常,則會致使此類異常也被捕獲。故 python 2.5 之後的版本推出了 BaseException 做爲全部異常的父類, Exception 做爲一個子類處理真正的異常。其語法介紹:
try: pass except Exception, e: pass # 處理錯誤的條件引起的錯誤和異常 try: pass except BaseException, e: pass # 處理全部發生的錯誤和異常
2.5 信用卡交易系統例子
#!/usr/bin/env python # -*- coding:utf-8 -*- def safe_float(obj): u'float() 的安全版' try: retval = float(obj) except (ValueError, TypeError), diag: retval = str(diag) return retval def main(): u'處理全部的數據' log = open('cardlog.txt','w') try: ccfile = open('carddata.txt', 'r') except IOError, e: log.write('no txns this month\n') log.close() return txns = ccfile.readlines() ccfile.close() total = 0.0 log.write('account log:\n') for eachTxn in txns: result = safe_float(eachTxn) if isinstance(result, float): total += result log.write('data...processed\n') else: log.write('ignored: %s' % result) print '$%.2f (new balance)' % total log.close() if __name__ == '__main__': main()
注: carddata.txt 內容以下:
執行後結果:
E:\code\Core Python Programming\10\Notes\eg python cardrun.py $58.94 (new balance)
生成的cardlog.txt內容:
2.6 try-except語句能夠跟 else 從句,相似循環中 else 從句執行條件,當 try 中的語句塊沒有引起任何異常時,執行 else 語句。不然執行相應的 except 語句或拋出異常, else 語句被跳過。
finally 子句則是不管異常是否發生、是否被 except 語句處理都會執行的一段代碼
3.上下文管理
3.1 with 語句
with 語句語法以下:
with open(r'E:\Test') as f: for eachline in f: pass # do something to f or eachline
這段代碼試圖打開一個文件並賦值給f。若一切正常,文件對象被賦值給f並進行下面的迭代步驟,在下面步驟完成後關閉文件;不然,不管在什麼時候發生異常,均執行清理代碼並關閉文件。
4.觸發異常
4.1 raise 語句是Python提供的一種機制,用於讓程序員可以在遇到錯誤的輸入時明確的觸發異常。其用法和語法以下:
5.斷言
斷言用來測試一個表達式返回值的真假,若爲真不採起任何操做,若爲假則拋出 AssertionError 。語法實例以下:
>>> assert 1 == 1 >>> assert 1 == 0 Traceback (most recent call last): File "<stdin>", line 1, in (module) AssertionError
6.標準異常
Python內建的全部異常類型以下