課時32 異常處理 你不可能總是對的

2022-08-04 11:15:13 字數 4178 閱讀 5547

目錄:

一、什麼是異常?

二、異常的總結

三、課時32課後習題及答案

一、什麼是異常?

程式出現邏輯錯誤或者使用者輸入不合法都會引起異常,但這些異常並不是致命的,不會導致程式崩潰死掉。可以利用python提供的異常處理機制,在異常出現的時候及時捕獲,並從內部消化掉。

那麼什麼是異常呢?舉個例子:

file_name = input("

請輸入要開啟的檔名:")

f = open(file_name,'r'

)print("

檔案的內容是:")

for each_line in

f:

print(each_line)

這裡當然假設使用者輸入的是正確的,但只要使用者輸入乙個不存在的檔名,那麼上面的**就不堪一擊:

請輸入要開啟的檔名:我為什麼是乙個文件.txt

traceback (most recent call last):

file

"c:\users\14158\desktop\lalallalalal.py

", line 2, in

f = open(file_name,'r'

)filenotfounderror: [errno 2] no such file or directory: '

我為什麼是乙個文件.txt

'

上面的例子就丟擲了乙個filenotfounderror的異常,那麼python通常還可以丟擲哪些異常呢?這裡給大家做總結,今後遇到這些異常就不會陌生了。

二、異常的總結

1、assertionerror:斷言語句(assert)失敗

大家還記得斷言語句吧?在關於分支和迴圈的章節裡講過。當assert這個關鍵字後邊的條件為假的時候,程式將停止並丟擲assertionerror異常。assert語句一般是在測試程式的時候用於在**中置入檢查點:

>>> my_list = ["

小甲魚"

]>>> assert len(my_list) >0

>>>my_list.pop()

'小甲魚

'>>> assert len(my_list) >0

traceback (most recent call last):

file

"", line 1, in

assert len(my_list) >0

assertionerror

2、attributeerror:嘗試訪問未知的物件屬性

>>> my_list =

>>>my_list.fishc

traceback (most recent call last):

file

"", line 1, in

my_list.fishc

attributeerror:

'list

' object has no attribute '

fishc

'

3、indexerror:索引超出序列的範圍

>>> my_list = [1,2,3]

>>> my_list[3]

traceback (most recent call last):

file

"", line 1, in

my_list[3]

indexerror: list index out of range

4、keyerror:字典中查詢乙個不存在的關鍵字

>>> my_dict = 

>>> my_dict["

one"]1

>>> my_dict["

four"]

traceback (most recent call last):

file

"", line 1, in

my_dict[

"four"]

keyerror:

'four

'

5、nameerror:嘗試訪問乙個不存在的變數當嘗試訪問乙個不存在的變數時,python會丟擲nameerror異常:

>>>fishc

traceback (most recent call last):

file

"", line 1, in

fishc

nameerror: name

'fishc'is

not defined

6、oserror:作業系統產生的異常oserror顧名思義就是作業系統產生的異常,像開啟乙個不存在的檔案會引發filenotfounderror,而這個filenotfounderror就是oserror的子類。例子上面已經演示過,這裡就不重複了。

7、syntaxerror:python語法錯誤

如果遇到syntaxerror是python語法的錯誤,這時python的**並不能繼續執行,你應該先找到並改正錯誤:

>>> print

"i love fishc.com

"syntaxerror: missing parentheses

in call to '

print

'. did you mean print("

i love fishc.com

")?

8、typeerror:不同型別間的無效操作有些型別不同是不能相互進行計算的,否則會丟擲typeerror異常:

>>> 1 + "1"

traceback (most recent call last):

file

"", line 1, in

1 + "1"

typeerror: unsupported operand type(s)

for +: '

int'

and'

str'

9、zerodivisionerror:除數為零地球人都知道除數不能為零,所以除以零就會引發zerodivisionerror異常:

>>> 5/0

traceback (most recent call last):

file

"", line 1, in

5/0zerodivisionerror: division by zero

我們知道了這些異常,那如何捕獲這些異常呢?

捕獲異常可以用try語句實現,任何出現在try語句範圍內的異常都會被及時捕獲到。try語句有兩種實現形式:一種是 try-except,另一種是try-finally。

三、課時32課後習題及答案

第32講 異常處理 你不可能總是對的

答案 由於環境的不確定性和使用者操作的不可以預知性都可能導致程式出現各種問題,因此異常機制最重要的無非就是 增強程式的健壯性和使用者體驗,盡可能的捕獲所有預知的異常並寫好處理的 當異常出現的時候,程式自動消化並恢復正常 不至於崩潰 my list 1,2,3,4,答案 語法錯誤,syntaxerro...

異常處理(自定義異常 不可預知異常)

1 在controller service dao中程式設計師拋出自定義異常 springmvc框架丟擲框架異常型別 springmvc框架和第三方元件丟擲不可預知異常。2 統一由異常捕獲類捕獲異常,並進行處理 3 捕獲到自定義異常則直接取出錯誤 及錯誤資訊,響應給使用者。4 捕獲到非自定義異常型別...

可預知的異常處理和不可預知的異常處理

1 自定義異常型別。2 自定義錯誤 及錯誤資訊。3 對於可預知的異常由程式設計師在 中主動丟擲,由springmvc統一捕獲。可預知異常是程式設計師在 中手動丟擲本系統定義的特定異常型別,由於是程式設計師丟擲的異常,通常異常資訊比較齊全,程式設計師在丟擲時會指定錯誤 及錯誤資訊,獲取異常資訊也比較方...