python的異常處理try/except 萬能處理exception


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外面的邏輯,我可以正常運行

萬能異常的缺點就是,假如你有一萬行代碼,不管啥錯誤都報這個,那你就不知道是哪里錯了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM