Python異常處理總結

2021-10-08 12:47:41 字數 4722 閱讀 1854

異常就是執行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種錯誤引發對應的異常時,異常處理程式將被啟動,從而恢復程式的正常執行。

: 檢測範圍

except exception[

as reason]

: 出現異常後的處理**

try 語句按照如下方式工作:

try

: f =

open

('test.txt'

)print

(f.read())

f.close(

)except oserror as error:

print

('開啟檔案出錯\n原因是:'

+str

(error)

)# 開啟檔案出錯

# 原因是:[errno 2] no such file or directory: 'test.txt'

乙個try語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有乙個分支會被執行。

【例子】

try

:int

("abc"

) s =1+

'1' f =

open

('test.txt'

)print

(f.read())

f.close(

)except oserror as error:

print

('開啟檔案出錯\n原因是:'

+str

(error)

)except typeerror as error:

print

('型別出錯\n原因是:'

+str

(error)

)except valueerror as error:

print

('數值出錯\n原因是:'

+str

(error)

)# 數值出錯

# 原因是:invalid literal for int() with base 10: 'abc'

【例子】

dict1 =

try:

x = dict1[

'y']

except lookuperror:

print

('查詢錯誤'

)except keyerror:

print

('鍵錯誤'

)else

:print

(x)# 查詢錯誤

try-except-else語句嘗試查詢不在dict中的鍵值對,從而引發了異常。這一異常準確地說應屬於keyerror,但由於keyerrorlookuperror的子類,且將lookuperror置於keyerror之前,因此程式優先執行該except**塊。所以,使用多個except**塊時,必須堅持對其規範排序,要從最具針對性的異常到最通用的異常。

【例子】

dict1 =

try:

x = dict1[

'y']

except keyerror:

print

('鍵錯誤'

)except lookuperror:

print

('查詢錯誤'

)else

:print

(x)# 鍵錯誤

【例子】乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個元組。

try

: s =1+

'1'int

("abc"

) f =

open

('test.txt'

)print

(f.read())

f.close(

)except

(oserror, typeerror, valueerror)

as error:

print

('出錯了!\n原因是:'

+str

(error)

)# 出錯了!

# 原因是:unsupported operand type(s) for +: 'int' and 'str'

``python

try:

檢測範圍

except exception[as reason]:

出現異常後的處理**

finally:

無論如何都會被執行的**

不管`try`子句裡面有沒有發生異常,`finally`子句都會執行。

如果乙個異常在`try`子句裡被丟擲,而又沒有任何的`except`把它截住,那麼這個異常會在`finally`子句執行後被丟擲。

【例子】

```python

def divide(x, y):

try:

result = x / y

print("result is", result)

except zerodivisionerror:

print("division by zero!")

finally:

print("executing finally clause")

divide(2, 1)

# result is 2.0

# executing finally clause

divide(2, 0)

# division by zero!

# executing finally clause

divide("2", "1")

# executing finally clause

# typeerror: unsupported operand type(s) for /: 'str' and 'str'

如果在try子句執行時沒有發生異常,python將執行else語句後的語句。

try

: 檢測範圍

except

: 出現異常後的處理**

else

: 如果沒有異常執行這塊**

使用except而不帶任何異常型別,這不是乙個很好的方式,我們不能通過該程式識別出具體的異常資訊,因為它捕獲所有的異常。

try

: 檢測範圍

except

(exception1[

, exception2[,.

..exceptionn]]]

):發生以上多個異常中的乙個,執行這塊**

else

: 如果沒有異常執行這塊**

【例子】

try

: fh =

open

("testfile"

,"w"

) fh.write(

"這是乙個測試檔案,用於測試異常!!"

)except ioerror:

print

("error: 沒有找到檔案或讀取檔案失敗"

)else

:print

("內容寫入檔案成功"

) fh.close(

)# 內容寫入檔案成功

注意:else語句的存在必須以except語句的存在為前提,在沒有except語句的try語句中使用else語句,會引發語法錯誤。

python 使用raise語句丟擲乙個指定的異常。

【例子】

try

:raise nameerror(

'hithere'

)except nameerror:

print

('an exception flew by!'

)# an exception flew by!

嘗試使用try catch異常處理結構對輸入情況進行處理。

題目:電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,「恭喜你猜到了這個數是…」。在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者"輸入無效"。

獲取隨機數採用random模組。

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

處理異常總結

總結一下在ray上看到的關於異常的幫助 有兩種崩潰 一種是sigabrt exc crash 一種是exc bad access sigbus or sigsegv sigabrt exc bad access是一種更難除錯的異常,因為它通常是記憶體管理問題 1.注意 錯誤 this class i...

異常處理總結

總的來說異常分為兩種 一 cheked exception 檢查異常 此異常在編譯時候就會檢測出來,我們必須進行捕獲處理。二 unchecked exception 非檢查異常 此異常是在執行期才會丟擲。例如我們常見的nullpointerexception indexoutofbound cept...