標籤:bsp nal self img elf 添加 trace 分享圖片 index
什麼是異常?異常和錯誤的區別 Error 語法錯誤 比較明顯的錯誤 在編譯代碼階段就能檢測出來 Iteration 異常 在執行代碼的過程中引發的異常異常發生之後的效果 一旦在程式中發生異常,程式就不再繼續執行了如何看報錯資訊 l = [] l[3] def func(): import time time.ti() def main(): func() main()
最簡單的異常處理l = [‘登入‘,‘註冊‘,‘退出‘]for i in enumerate(l,1): print(i[0],i[1])try: num = int(input(‘num :‘)) print(l[num-1])except IndexError: print(‘請輸入一個數字‘)多分支異常處理l = [‘登入‘,‘註冊‘,‘退出‘]for i in enumerate(l,1): print(i[0],i[1])try: num = int(input(‘num :‘)) print(l[num-1])except ValueError: print(‘請輸入一個數字‘)except IndexError: print(‘您輸入的數字無效‘)萬能異常try: name # NameError dic = {} dic[‘key‘]except Exception as 變數名: #Exception為所有異常的父類 print(type(變數名),變數名,變數名.__traceback__.tb_lineno)萬能異常和其他分支合作 : 萬能異常永遠要放在所有except的最後try: name [][3] import aexcept NameError:passexcept IndexError:passexcept Exception:pass異常處理的其他機制try: name [][3]except IndexError:print(‘index error‘)except NameError:print(‘name error‘)try: name [][3]except (IndexError,NameError) as e: print(e)try: a = 1 # name # [][3]except NameError: print(‘name error‘)except Exception: print(‘萬能異常‘)else: # try中的代碼正常執行 沒有異常的時候會執行else中的代碼 print(‘執行else了‘)finally: # 無論如何都會執行 作業系統資源歸還的工作 print(‘執行finally了‘)try: f = open(‘file‘,‘w‘) # f.read() exit()except:pass # 複雜的邏輯finally: f.close() print(‘執行我啦‘)def func(): try: f = open(‘file‘, ‘w‘) return f.read() finally: f.close() print(‘執行我了‘)func()try/excepttry/except/elsetry/except/else/finallytry/except/finallytry/finally主動拋異常try: num = int(input(‘>>>‘))except Exception: print(‘在出現了異常之後做點兒什麼,再讓它拋異常‘) raise # 原封不動的拋出try語句中出現的異常自訂異常raise NameError(‘這是一個name error的異常‘)class EvaException(Exception): def __init__(self,msg): self.msg = msgraise EvaException(‘這是一個什麼什麼錯誤,有什麼問題‘)斷言assert 布爾值assert Trueif False: print(1234234)else: raise AssertionError使用異常處理的注意事項斷言 assert raise 主動拋異常異常處理 try/except try/except/else try/except/else/finally try/except/finally try/finallystrat.pyif __name__ == ‘__main__‘: try: core.main() except Exception: pass盡量少用異常處理能通過邏輯規避的應該代碼邏輯規避掉應該對某一句/幾句話來進行處理最後 在外層添加一個大的異常處理
python 異常處理