您好,登錄后才能下訂單哦!
python的異常,以及用try復合語句處理異常。
運行代碼時有時會出現各種各樣的錯誤,致使解析器中斷執行,并提示xxxxxxErorr的提示,后面跟具體的錯誤的描述,這被稱為是引發了異常。
其實異常告訴我們的是遇到了什么類型的錯誤。xxxxErorr就是python內置的異常類型。每一種異常類型,都有它自己的錯誤信息。
有一種比較容易辨識,容易處理的錯誤,語法錯誤:SyntaxError
是由于寫代碼時的語法錯誤,大部分的解析器都會提前提示,像pycharm,在書寫時如果語法錯誤,都會有波浪線提示。語法上的錯誤很好處理,類似與寫文章寫錯字了,改正就行了。
如何處理異常:
除了語法錯誤能輕松搞定,其他有些異常類型不影響代碼的功能,而又不想讓異常中斷執行時,就要對異常進行處理,而不讓他中斷程序:
例如:有一個字典personDetail={"name":“光頭強”}里邊是光頭強的資料,想取到它的資料,但具體都有什么資料我們不知道,如果輸入的鍵不存在就會引發異常而中斷執行。致使后面的代碼也為無法執行。
那么就要捕獲這些異常,繞過它,能讓下面的代碼繼續運行。python提供了try語句來實現這些功能。
語法:
try:
可能發生異常的代碼
except 異常類型:
捕獲的異常后要執行的代碼
try 語句的工作原理如下。
1)執行 try 子句時如果沒有異常發生,則跳過 except 子句并完成 try 語句的執行。
2)如果在執行try 子句時發生了異常,則跳至except子句。
3)執行 except 子句 ,如果引發異常的類型和 except 關鍵字后面的異常匹配,就是捕獲了異常,執行except子句。
例如:
gtqDict={"Name":"光頭強","Age":34,"Gender":"男" try: print(gtqDict["Weight"]) except KeyError: print("Weight不存在,繼續走" print(gtqDict["Age"]) print(gtqDict["Gender"])
例子不管weight是否存在,都能使得程序完。
捕獲多個異常:
有時不確定會發生哪種異常,就把異常類型以元組的形式組包統統放在except后面,來匹配可能發生的異常:
比如:要打印光頭強年齡的Age鍵,不確定這個鍵是否存在,就用KeyErorr,不確定會不會發生鍵名是否正確,就用NameErorr。
例如:
gtqDict={"Name":"光頭強","Age":34,"Gender":"男" try: print(gtqDict["age"]) except (KeyError,KeyError): print("age錯誤" print(gtqDict["Name"]) print(gtqDict["Gender"])
捕獲異常的描述信息:可以將異常的具體描述打印出來,以供參考。
try:可能發生異常的代碼
except (KeyError,KeyError) as 信息變量:
print(信息變量)
例如:
gtqDict={"Name":"光頭強","Age":34,"Gender":"男"} try: print(gtqDict["Weight"]) except (KeyError,KeyError) as e: print(type(e),e) print(gtqDict["Name"]) print(gtqDict["Gender"])
捕獲所有異常:
前面提過,引發異常的xxxxErorr都是python異常的類型。python中所有異常類型都是基類Exception的派生類。
那么在寫代碼的時候不用指定異常的具體類型,只要捕獲基類就等于捕獲了所有的異常,但輸出的是具體的異常信息,這很有利于在大范圍內找到具體的錯誤。
語法:
try:可能發生異常的代碼
except Excepthon as 信息變量:
print(信息變量)
例如:
gtq="光頭強" try: print(name) except Exception as e: print(type(e),e print("gtq") ---<class 'NameError'> name 'name' is not defined ---gtq
異常里的else子句:
else子句是可選的,如果使用,必須放在所有的except子句之后。
它是在try子句沒有發生異常的情況執行。
例如:
gtq="光頭強" try: name=gtq except Exception as e: print(type(e),e) else: print("%s是一個伐木工人"%name)
finally子句: 寫在try語句的最后。
不管 try 子句里面是否有異常,finally 子句都會執行。
例如:
gtq="光頭強" try: name=GTQ except Exception as e: print(type(e),e) else: print("%s是一個伐木工人"%name) finally: print("調用資料結束") ---<class 'NameError'> name 'GTQ' is not defined ---調用資料結束
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。