python核心編程-第十章-我的筆記

一、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內建的全部異常類型以下

相關文章
相關標籤/搜索