13-python基礎知識-異常處理
阿新 • • 發佈:2018-12-28
異常處理
相關概念
- 錯誤:程式執行之前的語法問題,如:關鍵字出錯、縮排不齊、括號不成對等
- 異常:程式執行過程中出現的問題,如:除數為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
-
完整寫法
try: print('正常程式碼') print(a) except Exception as e: print('出現異常', e) else: # 沒有異常時會執行 print('正常結束'
-
手動丟擲異常
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) # ... # 結束時不需要考慮檔案的關閉問題 # 無論中間是否出現了異常,一定會確保檔案關閉