程式執行時,如果python直譯器遇到乙個錯誤,會停止程式的執行,提示錯誤資訊,這就是丟擲異常。
程式設計師通過異常捕獲,可以針對突發事件做處理,不讓程式因為報錯而終止。
(1)簡單的捕獲異常語法
對某些不能確定是否正確的**,可以增加try(嘗試)來捕獲異常,並加以處理。
try:
嘗試執行的**
except:
出現錯誤的處理
例子:要求使用者輸入整數
try:
num =
int(
input
("請輸入乙個整數:"
)) # 不能確定正確執行的**
except:
print
("請輸入正確的整數!"
) # 錯誤的處理**
print
("-"*50
) # 無論是否出現錯誤,程式均會執行後續的**
輸出:請輸入乙個整數:1.2
請輸入正確的整數!
----
----
----
----
----
----
----
----
----
----
----
----
--
(2)錯誤型別捕獲
針對不同型別的異常,做出不同的響應。
當直譯器丟擲異常時,最後一行的第乙個單詞,就是錯誤型別。
語法格式:
try:
# 不能保證正確的**
except 錯誤型別1:
# 針對錯誤型別1的處理
except (錯誤型別2, 錯誤型別3):
# 針對錯誤2,3的處理
except exception as result: # 固定語法,針對其他錯誤型別
print
("未知錯誤 %s"
% result)
例子:提示使用者輸入乙個整數,使用8除以這個整數並輸出。
有兩種錯誤的可能型別:① 使用者輸入的不是整數 ②使用者輸入的是0,分母不能為0
try:
num =
int(
input
("請輸入乙個整數:"))
result =
8/num
print
(result)
except zerodivisionerror:
print
("除0錯誤"
)except valueerror:
print
("請輸入整數"
)
except exception as result:
print
("未知錯誤 %s"
% result)
輸出:請輸入乙個整數:a
請輸入整數
try:
# 不能保證正確的**
except 錯誤型別1:
# 針對錯誤型別1的處理
except (錯誤型別2, 錯誤型別3):
# 針對錯誤2,3的處理
except exception as result: # 固定語法,針對其他錯誤型別
print
("未知錯誤 %s"
% result)
else
: # 沒有異常才會執行的**
finally:
# 無論是否有異常,都會執行的**
**正確:try——> else ——> finally
**有錯誤:try——> except ——> finally
例子:
try:
num =
int(
input
("請輸入乙個整數:"
)) # 不能確定正確執行的**
result =
8/ num
print
(result)
except valueerror:
print
("請輸入正確的整數!"
) # 錯誤的處理密碼
except exception as result:
print
("未知錯誤 %s"
% result)
else
:print
("嘗試成功"
)finally:
print
("都會執行"
)print
("-"*50
)輸出:
請輸入乙個整數:0
未知錯誤 division by zero
都會執行
----
----
----
----
----
----
----
----
----
----
----
----
--
當函式/方法執行出現異常,會將異常往上傳遞給 函式/方法呼叫的一方。直到傳到主程式,仍然沒有異常處理,程式才會被終止。
因此,在開發中,可以在主程式中,利用異常的傳遞性,增加異常捕獲。這樣就不需要在**中增加大量的異常捕獲了,保證**的簡潔性。
例子:
def demo1()
:return
int(
input
("輸入整數:"))
def demo2()
:return
demo1()
# 在主程式中,利用異常的傳遞性,捕獲異常
try:
print
(demo2()
)except exception as result:
print
("未知錯誤 %s"
% result)
根據應用程式特有的業務需求主動丟擲異常。
語法:① 建立乙個 exception 物件。exception 是python提供的專門的異常類。
② 使用 raise 關鍵字丟擲異常物件。
例子:提示使用者輸入密碼,如果長度少於8,丟擲異常。
def input_password()
: pwd =
input
("請輸入密碼:")if
len(pwd)
>=8:
return pwd
else
: ex =
exception
("密碼長度不夠"
) # 建立異常物件,可以使用錯誤資訊字串作為引數
raise ex # 主動丟擲
try:
print
(input_password()
)except exception as result:
print
(result)
輸出:請輸入密碼:1234
密碼長度不夠
Python學習筆記 物件導向
物件導向 oop 基本概念 物件導向程式設計 object oriented programming簡寫 oop 1 物件導向基本概念 之前的學習程式設計方式就是面向過程的 面向過程和物件導向,是兩種不同的程式設計方式 對比面向過程的特點,可以更好的了解什麼是物件導向 2 過程和函式 科普 過程是最...
物件導向程式設計(C )學習筆記七
class aaa int main 除此之外,內部類和普通類沒有任何區別。注意事項 內部類和外部類互相沒有特權,它們沒有任何特殊關係,它們不是朋友關係,它們不是父子關係,所以外部類無法自由訪問內部類,內部類也無法訪問外部類。解決名字衝突的終極手段 namespace,名字空間,語法為 namesp...
python物件導向學習(七)單例
目錄2.new 方法 3.python 中的單例 單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!class musicplayer object def new cls,args,kwargs ...