在python中捕捉異常
在python
中,可以使用
try語句處理異常。
可能引發異常的關鍵操作放在
try子句中,並且將處理異常的**編寫在
except
子句中。
捕獲異常後,我們將執行什麼操作取決於我們自己。這是乙個簡單的例子。
# import module sys to get the type of exception
import sys
randomlist = ['a', 0, 2]
for entry in randomlist:
try:
print("the entry is", entry)
r = 1/int(entry)
break
except:
print("oops!",sys.exc_info()[0],"occured.")
print("next entry.")
print()
print("the reciprocal of",entry,"is",r)
輸出量
the entry is a
oops! occured.
next entry.
the entry is 0
oops! occured.
next entry.
the entry is 2
the reciprocal of 2 is 0.5
在此程式中,我們迴圈執行,直到使用者輸入具有有效倒數的整數。可能導致異常的部分放在
try塊中。
如果沒有異常發生,則跳過除塊以外的內容,並繼續正常流程。但是,如果發生任何異常,它將被
except
塊捕獲。
在這裡,我們使用模組
ex_info()
內部的函式列印異常的名稱,
sys並要求使用者重試。我們可以看到,值
「 a」
和「 1.3」
導致valueerror
,而值「 0」
導致zerodivisionerror。
捕獲python中的特定異常
在上面的示例中,我們在
except
子句中未提及任何異常。
這不是乙個好的程式設計習慣,因為它將捕獲所有異常並以相同的方式處理每種情況。我們可以指定
except
子句會捕獲哪些異常。 乙個
try子句可以具有任意數量的
except
子句以不同方式處理它們,但萬一發生異常,則只會執行乙個。
我們可以使用值的元組在
except
子句中指定多個異常。這是示例偽**。
try:
# do something
pass
except valueerror
:# handle valueerror exception
pass
except(
typeerror
, zerodivisionerror
):# handle multiple exceptions
# typeerror and zerodivisionerror
pass
except:
# handle all other exceptions
pass
引發異常
在python
程式設計中,在執行時發生相應的錯誤時會引發異常,但是我們可以使用關鍵字
raise
強制引發它。
我們還可以選擇將值傳遞給異常,以闡明引發該異常的原因。
>>> raise keyboardinterrupt
traceback
(most recent call last):
...keyboardinterrupt
>>> raise memoryerror
("this is an argument"
)traceback
(most recent call last):
...memoryerror
: this isan argument
>>> try:
... a = int(input(
"enter a positive integer: "
))... ifa <= 0:
... raise valueerror
("that is not a positive number!"
)... except valueerror asve:
... print(ve)
...
enter
a positive integer: -
2that is nota positive number!
嘗試...最後
python
中的try
語句可以具有可選
finally
子句。該子句無論如何執行,通常用於釋放外部資源。
例如,我們可能通過網路或使用檔案或使用圖形使用者介面(
gui)連線到遠端資料中心。
在所有這些情況下,無論資源是否成功,我們都必須清除該資源。這些操作(關閉檔案,
gui或與網路斷開連線)在
finally
子句中執行,以確保執行。
這是乙個
檔案操作
的例子來說明這一點。
try:
f = open(
"test.txt"
,encoding =
'utf-8'
)# perform file operations
finally:
f.close()
這種型別的構造可確保即使發生異常也關閉檔案。
python的異常捕捉
你可能會說既然有萬能異常exception,那麼我直接用上面的這種形式就好了,其他異常可以忽略 你說的沒錯,但是應該分兩種情況去看 1.如果你想要的效果是,無論出現什麼異常,我們統一丟棄,或者使用同一段 邏輯去處理他們,那麼騷年,大膽的去做吧,只有乙個exception就足夠了。複製 s1 hell...
C 中捕捉異常
trycatch語句理解 try 此處放的是可能會存在異常的 catch 這裡寫要捕捉異常的型別。常見的有三種,nullreferenceexception e,indexoutofrangeexception e,formatexctption e 分別是空引用異常,你所引用的東西不存在,可能是呼...
Python之捕捉異常詳解
目錄 語法錯誤 沒有按照語法規則書寫程式 執行錯誤 執行時出錯 邏輯程式設計客棧錯誤 邏輯上出錯 用異常物件 exception object 表示異常情況 除fmjafdvypk數為0的異常 將被檢測的語句塊放入try塊,將異常處理語句塊放入except塊中 如果被檢測的語句塊中沒有異常,則忽略e...