目錄
異常處理
python中常見的異常
在python當中,若乙個程式在執行的時候出錯,python直譯器會自動的在出錯的地方生成乙個異常物件,而後python直譯器會自動的在出錯地方的附近尋找有沒有對這個異常物件處理的**,所謂異常處理**就是 try……except 語句。如果沒有,python直譯器會自動的將這個異常物件拋給其呼叫函式,就這樣層層丟擲,如果在 main 當中也沒有對這個異常物件處理的**,python直譯器(實際上是作業系統)最後會做乙個簡單粗暴的處理,將整個程式給終止掉,並將錯誤的資訊在顯示屏上輸出。
異常是 python 物件,表示乙個錯誤,當 python 指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。
try的工作原理是:當開始乙個 try 語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
try:
可能出現異常的**塊
except ioerror: #捕獲特定的異常
print("io異常")
except exception as e: #捕獲所有異常資訊並別名為e
print("異常的型別是:%s" % type(e))
print("異常的內容是:%s" % e)
else:
print('如果**塊不丟擲異常會執行此行**!')
finally:
print('不管**塊是否丟擲異常都會執行此行**!')
例如,開啟乙個檔案,並且列印出其內容。正常情況下,如果檔案路徑正確的話,會列印出該檔案的內容。如果路徑錯誤,或者檔案不存在的話,就會丟擲異常。
try:
f=open('c://users//17250//desktop','r')
except exception as e:
print("異常的型別是:%s"%type(e))
print("產生異常:%s"%e)
else:
print(f.read())
finally:
f.close()
#如果檔案路徑錯誤,或者檔案不存在,丟擲的異常
異常的型別是:產生異常:[errno 2] no such file or directory: 'c://users//17250//deskop'
我們也可以自己手動觸發異常,使用 raise 語句。
try:
if true:
raise exception("異常")
except exception as e:
print("異常物件的型別是:%s"%type(e))
print("異常物件的內容是:%s"%e)
###################################
異常物件的型別是:異常物件的內容是:異常
attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x
ioerror 輸入/輸出異常;基本上是無法開啟檔案
importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤
indentationerror 語法錯誤(的子類) ;**沒有正確對齊
indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)
typeerror 傳入物件型別與要求的不符合
unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的
python 中的異常處理
python的異常處理能力是很強大的,可向使用者準確反饋出錯資訊。在python中,異常也是物件,可對它進行操作。所有異常都是基類exception的成員。所有異常都從基類exception繼承,而且都在exceptions模組中定義。python自動將所有異常名稱放在內建命名空間中,所以程式不必匯...
Python中的異常處理
當python檢測到乙個錯誤時,直譯器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的 異常 看如下示例 try print test1 open 123.txt r print test2 except ioerror pass此時可以正常執行,執行結果為 test1 說明 try exc...
python中的異常處理
python使用異常物件來表示異常狀態,並在遇到錯誤時引發異常,異常物件未被處理時,程式將終止並顯示一條錯誤資訊。raise語句 自定義異常類 class somecustomexception exception pass class myexceptionclass exception def ...