1. 程式人生 > >13-python基礎知識-異常處理

13-python基礎知識-異常處理

異常處理

相關概念

  • 錯誤:程式執行之前的語法問題,如:關鍵字出錯、縮排不齊、括號不成對等
  • 異常:程式執行過程中出現的問題,如:除數為0,物件屬性不存在,字典的鍵不存在,下標越界

異常處理

  • 說明:異常處理可以理解為特殊的流程控制語句,可以提高程式碼的健壯性。

  • 語法:

    try:
        print('正常程式碼')
        a = 3 / 0
        print('執行結束')
    except Exception as e:
        # 捕獲異常,可以做出異常處理
        print('出現異常', e)
    
    print('OVER')
    
  • 多異常處理:

    # try:
    #     # print(a)
    #     # a = 3/0
    #     d = {}
    #     print(d['name'])
    # except NameError as e:
    #     print('NameError:', e)
    # except ZeroDivisionError as e:
    #     print('ZeroDivisionError:', e)
    # except Exception as e:
    #     print('Othre error:', e)
    
    try:
        # print(a)
        # a = 3 / 0
    d = [1, 2, 3] print(d[4]) except (NameError, ZeroDivisionError) as e: # 將某些異常放在一起進行統一處理 print('name or zero:', e) except Exception as e: print('其他異常')
  • 完整寫法

    try:
        print('正常程式碼')
        print(a)
    except Exception as e:
        print('出現異常', e)
    else:
        # 沒有異常時會執行
        print('正常結束'
    ) finally: # 無論有無異常都會執行 print('最後執行') print('OVER')
  • 手動丟擲異常

    try:
        print('正常執行')
        # 根據業務邏輯分析,手動丟擲異常
        raise Exception('手動丟擲的異常')
        print('執行結束')
    except Exception as e:
        print('出現異常:', e)
    
    print('OVER')
    
  • 異常巢狀

    print('我要去上班,什麼事也阻止不了我上班的腳步')
    try:
        print('我準備騎電動車去上班')
        raise Exception('不知道那個缺德的傢伙把我充電器拔掉了')
        print('騎電動車提前到達公司')
    except Exception as e:
        print('電車異常:', e)
        try:
            print('我準備坐公交去上班')
            raise Exception('等了20分鐘沒有公交車,果斷放棄')
            print('乘坐公交準時到達公司')
        except Exception as e:
            print('公交異常:', e)
            print('我準備打車去公司')
            print('打車還是快,還是能夠提前到達公司')
    
    print('熱情飽滿的開始一天的工作')
    
  • 自定義異常類

    # 自定義異常類
    class MyException(Exception):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return 'MyException:' + self.msg
    
        # 異常處理函式
        def deal(self):
            print('按照特定的方案處理異常')
    
    try:
        print('正常執行')
        raise MyException('自定義異常')
    except MyException as e:
        print(e)
        # 特定的處理方案
        e.deal()
    except Exception as e:
        print('Exception', e)
    
    print('OVER')
    
  • 特殊場景

    • 當進行檔案操作時,無論過程是否出現異常,最後一定要關閉檔案
    • 使用with語句,保證檔案關閉,無論中間是否出現異常
    • 示例:
    '''
    fp = open('xx.txt', 'r')
    content = fp.read(1024)
    print(content)
    # ...
    # 最後一定要關閉檔案
    fp.close()
    '''
    
    with open('00-text.txt', 'r') as fp:
        content = fp.read(1024)
        # ...
        # 結束時不需要考慮檔案的關閉問題
        # 無論中間是否出現了異常,一定會確保檔案關閉