python基礎 異常處理try except

2021-10-24 21:15:41 字數 4398 閱讀 2923

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 ...