寫的有點隨意,今晚剛學的,隨筆做個記錄,^ _ ^
當在執行一段python**時,程式難免會崩掉,比如變數沒有定義,除法分母為0,找不到相應的檔案。。。這時,系統會發出下面這樣的資訊:
# 是什麼型別錯誤,就寫什麼名字
pass
如下面這段**:
try
: answer =5/
0except zerodivesionerror:
print
("出現異常,分母不能為0。。。"
)
當執行時,將輸出:出現異常,分母不能為0。。。
程式沒有崩掉,被異常處理了。
總結:當程式中有多個不同的異常時,可以把多個要捕獲的異常的名字,放到except後,並使用元組的方式進行儲存。
try
: answer =5/
0print
(num)
except
(zerodivisionerror,nameerror)
as result:
print
("出現異常!"
)print
("異常資訊是:"
,result)
result
儲存出現異常的資訊
上面說的是可能出現哪種異常,就寫特定的異常名字,當程式**現多種異常,不止兩三個時,這時可以用exception,不管哪種異常,都會捕獲到,所以上面的程式還可寫成:
try
: answer =5/
0print
(num)
except exception as result:
print
("出現異常!"
)print
("異常資訊是:"
,result)
try:.
..except exception as result:..
.else:.
..
else
:當沒有捕獲到異常時,執行else
try
: answer =5/
1except zerodivesionerror:
print
("出現異常,分母不能為0。。。"
)else
:print
("沒有異常"
)print
(answer)
# 沒有異常
# 輸出:5
try:.
..except exception as result:..
.else:.
..finally:.
..
finally
:在程式中,如果一段**必須要執行,即無論異常是否產生都要執行,那麼此時可以使用finally。比如關閉檔案,釋放鎖,把資料庫連線返回給資料池等。
import time
try:
f =open
('test.txt'
)try
:while
true
: content = f.readline()if
len(content)==0
:break
time.sleep(2)
print
(content)
except exception:
# 當讀取檔案出現異常時,丟擲
pass
finally
: f.close(
)print
('關閉檔案'
)except exception:
# 當檔案不存在時,丟擲異常
print
("沒有這個檔案"
)
import time
try:
f =open
('test.txt'
)try
:while
true
: content = f.readline()if
len(content)==0
:break
time.sleep(2)
print
(content)
except exception:
# 當讀取檔案出現異常時,丟擲
pass
finally
: f.close(
)print
('關閉檔案'
)except exception:
# 當檔案不存在時,丟擲異常
print
("沒有這個檔案"
)
def
test1()
:print
("test1-1"
)print
(num)
print
("test1-2"
)def
test2()
:print
("test2-1"
) test1(
)print
("test2-2"
)def
test3()
:try
:print
("test3-1"
) test2(
)print
("test3-2"
)except exception as result:
print
("捕獲到了異常,異常資訊:"
,result)
print
("test3-2"
)test3(
)print
("沒有找到異常處理時,返回python直譯器,程式崩掉"
)test2(
)
輸出資訊:
這段**中,執行順序為:
test3() -> test2() -> test1() 出現異常,返回 test2(),沒有找到異常處理,接著返回test3(),做異常處理。
當test2()返回也沒有找到異常處理時,會直接拋給python直譯器,程式崩掉!!
class
test
(object):
def__init__
(self,switch)
: self.switch = switch # 開關
defcalc
(self,a,b)
:try
:return a/b
except exception as e:
if self.switch:
print
("捕獲開啟,已經捕獲到了異常,錯誤資訊是:"
)print
(e)else
:# 重新丟擲這個異常,此時不會被這個異常處理給捕獲,直接拋給python 直譯器
raise
a = test(
true
)a.calc(5,
0)print
("--------------------"
)a.switch =
false
a.calc(5,
0)
分割線前,程式執行,出現了異常,拋給了異常處理;
分割線後,程式執行,出現了異常,但switch是false,無法被異常處理,執行else,拋給了系統處理,程式崩掉!
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...