python目前(至少)有兩種可區分的錯誤:語法錯誤和異常。異常是指在語法正確的情況下執行時引發的錯誤。有時候我們需要處理這些異常,就會用到try-except語句。
while
true
:try
: x =
int(
input
("請輸入乙個整數: "))
y =12/ x
print
("被12除得到的結果:{}"
.format
(y))
break
except valueerror:
#valueerror: invalid literal for int() with base 10: 'art'
print
("無效的數字,請重試!"
)except zerodivisionerror as err:
#zerodivisionerror: division by zero
print
('除數不能為0:'
, err)
當出現valueerror
的異常時:
請輸入乙個整數: art
無效的數字,請重試!
請輸入乙個整數: 12
被12除得到的結果:1.0
當出現zerodivisionerror
的異常時
請輸入乙個整數: 0
除數不能為0: division by zero
請輸入乙個整數: 12
被12除得到的結果:1.0
乙個 except 子句可以將多個異常命名為帶括號的元組
except
(valueerror, zerodivisionerror)
:pass
try ... except
語句有乙個可選的else
子句,在使用時必須放在所有的except
子句後面。用來編寫在try
子句不引發異常時必須執行的**。
while
true
:try
: x =
int(
input
("請輸入乙個整數: "))
y =12/ x
print
("被12除得到的結果:{}"
.format
(y))
#break #這個break和下面的else語句有衝突,有break下面的else語句就會執行不到
except valueerror:
print
("無效的數字,請重試!"
)except zerodivisionerror as err:
print
('除數不能為0:'
, err)
#try語句中的**不報錯時執行下面的
else
:print
("輸入的整數是:,計算得到的結果是:"
.format
(x,y)
)break
程式執行如下:
請輸入乙個整數: 12
被12除得到的結果:1.0
輸入的整數是:12,計算得到的結果是:1.0
try
語句有另乙個可選子句,用於定義必須在所有情況下執行的清理操作。
官方文件中的例子:
def
divide
(x, y)
:try
: result = x / y
except zerodivisionerror:
print
("除數不能為0!"
)else
:print
("計算結果為:"
, result)
finally
:print
("執行finally語句!"
)
引數正確:
divide(2,
1)
計算結果為: 2.0
執行finally語句!
除數引數輸入0:
divide(2,
0)
除數不能為0!
執行finally語句!
引數不為整數:
divide(
"2",
"1")
traceback (most recent call last):
file "d:/code/exercise/blog/error.py"
, line 36, in divide(
"2",
"1")
file "d:/code/exercise/blog/error.py"
, line 28, in divide
result = x / y
執行finally語句!
typeerror: unsupported operand type
(s)for
/: 'str' and 'str'
raise
語句允許程式設計師強制發生指定的異常。用於主動丟擲異常。
raise
唯一的引數就是要丟擲的異常。這個引數必須是乙個異常例項或者是乙個異常類(派生自 exception 的類)。
raise nameerror(
"這是乙個nameerror!"
)
執行:
traceback (most recent call last):
file "d:/code/exercise/blog/error.py"
, line 42, in raise nameerror(
"這是乙個nameerror!"
)nameerror: 這是乙個nameerror!
可以通過建立新的異常類來自定義異常。異常通常應該繼承exception
類。
下面是乙個selenium
封裝定位方法中的例子:
class
locatortypeerror
(exception)
:# 定位元素輸入型別錯誤的異常
pass
deffind
(locator):if
notisinstance
(locator,
tuple):
raise locatortypeerror(
"引數型別錯誤,locator必須是元組型別,loc = ('id','value1')"
)
定義的異常類,通常保持簡單,可以提供一些屬性,為異常提取有關錯誤的資訊。
class
iderror
(exception)
:#輸入id錯誤的異常
def__init__
(self, input_id)
: self.input_id = input_id
defquery_user(id
):ifnot
isinstance(id
,int):
raise iderror(
"id{}輸入錯誤,使用者id必須是整型"
.format
(iderror(id)
.args)
)query_user(
"sdsadasds"
)
執行:
traceback (most recent call last):
file "d:/code/exercise/blog/error.py"
, line 47, in query_user(
"sdsadasds"
) file "d:/code/exercise/blog/error.py"
, line 45, in query_user
raise iderror(
"id{}輸入錯誤,使用者id必須是整型"
.format(iderror(id)
.args)
)__main__.iderror: id(
'sdsadasds'
,)輸入錯誤,使用者id必須是整型
python內建異常型別查閱 python 詳解 try 處理異常機制
python的try語句有兩種風格 try 語句子句形式表 try的工作原理是,當開始乙個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。一 try except else風格 try except ...
Swift異常處理的try?與try!
首先要明白丟擲異常後異常的運動 異常被丟擲後,中斷整個處理,異常不斷向外層 範圍 傳遞,直到遇到catch 塊群,會與catch 塊的條件進行匹配,匹配符合則進入此 塊處理。如果遇到沒有條件的catch 那麼直接在這個 裡處理。如果丟擲的異常一直到最外層仍沒有被catch 處理,那麼程式會卡住 後面...
Python小筆記 Try函式 異常處理
異常處理 捕捉異常可以使用try except語句。try except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。語法 以下為簡單的try except else的語法 try 語句 執行別的 except ...