當python檢測到乙個錯誤時,直譯器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的」異常」。
看如下示例:
try:
print('test1')
open('123.txt','r')
print('test2')
except ioerror:
pass
此時可以正常執行,執行結果為「test1」。
說明:
try…except…用法:
看如下示例:
try:
print num
except ioerror:
print('產生錯誤了')
這時程式報錯了,但是明明已經處理異常了呀,為什麼不能輸出「產生錯誤了」,而是報錯呢?
這是因為except捕獲的錯誤型別是ioerror,而此時程式產生的異常為 nameerror ,所以except沒有生效。
修改的**為:
try:
print num
except nameerror:
print('產生錯誤了')
此時程式就可以正常執行了。
但是如果123.txt檔案不存在,那麼會產生 ioerror 異常,如果num變數沒有定義,那麼會產生 nameerror 異常,那麼多異常,如果想通過一次except捕獲到多個異常怎麼辦?可以用乙個元組的方式。
try:
print('test1')
open('123.txt','r')
print('test2')
print(num)
except (ioerror,nameerror):
pass
try:
print(a)
open('a.txt')
except:
print('產生錯誤了')
這樣可以捕獲所有異常,但是我們不知道產生的異常是什麼。
獲取異常的資訊
try:
open('a.txt')
except exception as
result:
print(result)
結果為:
no such file or directory: 『a.txt』
這樣我們就能獲取異常的資訊了。
我們應該對else並不陌生,在if中,它的作用是當條件不滿足時執行的實行;同樣在try…except…中也是如此:如果沒有捕獲到異常,那麼就執行else中的事情。
try:
num = 100
print num
except nameerror as errormsg:
print('產生錯誤了:%s'%errormsg)
else:
print('沒有捕獲到異常')
結果為:
100
沒有捕獲到異常
在程式中,如果乙個段**必須要執行,即無論異常是否產生都要執行,那麼此時就需要使用finally。 比如檔案關閉,釋放鎖,把資料庫連線返還給連線池等。
try:
f = open('test.txt')
try:
while
true:
content = f.readline()
if len(content) == 0:
break
print(content)
except:
#如果在讀取檔案的過程中,產生了異常,那麼就會捕獲到
pass
finally:
f.close()
print('關閉檔案')
except:
print("沒有這個檔案")
python 中的異常處理
python的異常處理能力是很強大的,可向使用者準確反饋出錯資訊。在python中,異常也是物件,可對它進行操作。所有異常都是基類exception的成員。所有異常都從基類exception繼承,而且都在exceptions模組中定義。python自動將所有異常名稱放在內建命名空間中,所以程式不必匯...
python中的異常處理
python使用異常物件來表示異常狀態,並在遇到錯誤時引發異常,異常物件未被處理時,程式將終止並顯示一條錯誤資訊。raise語句 自定義異常類 class somecustomexception exception pass class myexceptionclass exception def ...
Python中的異常處理
目錄 異常處理 python中常見的異常 在python當中,若乙個程式在執行的時候出錯,python直譯器會自動的在出錯的地方生成乙個異常物件,而後python直譯器會自動的在出錯地方的附近尋找有沒有對這個異常物件處理的 所謂異常處理 就是 try except 語句。如果沒有,python直譯器...