1、try方式
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 except ValueError as e: #except代表捕捉的意思,as,把ValueError取個別名叫e print(e) #表示代碼在執行過程中遇到異常之后直接跳到except C:\python35\python3.exe D:/pyproject/day31/錯誤與異常.py >>>23 >>>>dd invalid literal for int() with base 10: 'dd'
那如果出現了其他的類型的錯誤呢。我們上面這個只能捕捉到這一種錯誤類型
2、try多分支異常處理,類似於elif
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 except KeyError as e: #except代表捕捉的意思,把ValueError取個別名叫e print(e) except ValueError as e: print("--->",e) C:\python35\python3.exe D:/pyproject/day31/異常處理.py >>>aa ---> invalid literal for int() with base 10: 'aa'
2.1上面這是2種錯誤,那么如果再來一種錯誤呢
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 l=[1,2,3] l[666666]#取一個不存在的索引就會觸發IndexError except KeyError as e: #except代表捕捉的意思,把ValueError取個別名叫e print(e) except ValueError as e: print("--->",e) except IndexError as e: print("索引錯誤",e) C:\python35\python3.exe D:/pyproject/day31/異常處理.py >>>1 >>>>2 索引錯誤 list index out of range
2.2如果try里面的代碼運行有錯誤了,並不影響try外面的代碼的繼續運行的
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 l=[1,2,3] l[666666]#取一個不存在的索引就會觸發IndexError except KeyError as e: #except代表捕捉的意思,把ValueError取個別名叫e print(e) except ValueError as e: print("--->",e) except IndexError as e: print("索引錯誤",e) print("我是try外面的邏輯,我可以正常運行") C:\python35\python3.exe D:/pyproject/day31/異常處理.py >>>11 >>>>sdsf ---> invalid literal for int() with base 10: 'sdsf' 我是try外面的邏輯,我可以正常運行
3、那么還有好多的異常類型呢,總不能一個一個的都加上去吧,這時候就用到了萬能異常
Exception
這樣的話不管什么錯誤都可以捕捉的到了。
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 l=[1,2,3] l[666666]#取一個不存在的索引就會觸發IndexError except Exception as e: print("萬能異常",e) print("我是try外面的邏輯,我可以正常運行") C:\python35\python3.exe D:/pyproject/day31/異常處理.py >>>111 >>>>sdfdsf 萬能異常 invalid literal for int() with base 10: 'sdfdsf' 我是try外面的邏輯,我可以正常運行
3.1 try else 當代碼塊中沒有異常則觸發else
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 except Exception as e: #except代表捕捉的意思,把ValueError取個別名叫e print("萬能異常",e) else: print("沒有異常就執行我") print("我是try外面的邏輯,我可以正常運行") C:\python35\python3.exe "D:/pyproject/day31異常處理 socket介紹/異常處理.py" >>>11 >>>>22 沒有異常就執行我 我是try外面的邏輯,我可以正常運行
3.2 finally 不管有沒有異常都執行這段代碼塊
try: age=int(input(">>>")) int(age)#主邏輯 num=input(">>>>") int(num)#主邏輯 except Exception as e: #except代表捕捉的意思,把ValueError取個別名叫e print("萬能異常",e) finally: print("無論是否異常都執行這段代碼,通常是進行清理操作") print("我是try外面的邏輯,我可以正常運行") C:\python35\python3.exe "D:/pyproject/day31異常處理 socket介紹/異常處理.py" >>>11 >>>>sddsdf 萬能異常 invalid literal for int() with base 10: 'sddsdf' 無論是否異常都執行這段代碼,通常是進行清理操作 我是try外面的邏輯,我可以正常運行
3.3我想達到這樣的效果,如果用戶輸入的不對,就讓他重新輸入,知道正確為止
while True: try: age=int(input(">>>")) int(age)#主邏輯 break except Exception as e: print("請重新輸入",e) print("我是try外面的邏輯,我可以正常運行") C:\python35\python3.exe D:/pyproject/day31/異常處理.py >>>222ss 請重新輸入 invalid literal for int() with base 10: '222ss' >>>11 我是try外面的邏輯,我可以正常運行
萬能異常的缺點就是,假如你有一萬行代碼,不管啥錯誤都報這個,那你就不知道是哪里錯了。。。