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

2021-08-08 11:46:26 字數 2202 閱讀 3671

答案:

由於環境的不確定性和使用者操作的不可以預知性都可能導致程式出現各種問題,因此異常機制最重要的無非就是:增強程式的健壯性和使用者體驗,盡可能的捕獲所有預知的異常並寫好處理的**,當異常出現的時候,程式自動消化並恢復正常(不至於崩潰)。

>>> my_list = [1, 2, 3, 4,,]
答案:

語法錯誤,syntaxerror: invalid syntax

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

>>> print(my_list[len(my_list)])

答案:

len(my_list)是獲得列表的長度,這裡長度為5,該列表各個元素的訪問索引號分別是:[0,1,2,3,4],因此試圖訪問my_list(5)會引發 indexerror: list index out of range 異常。

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

>>> my_list.sorted()

答案:

初學者容易疏忽的錯誤,列表的排序方法叫 list.sort(),sorted() 是bif。因此會引發 attributeerror: 'list' object has no attribute 'sorted' 異常。

>>> my_dict = 

>>> print(my_dict['server'])

答案:嘗試訪問字典中乙個不存在的「鍵」引發 keyerror: 'server' 異常,為了避免這個異常發生,可以使用 dict.get() 方法:

if not my_dict.get('server'):

print('您所訪問的鍵【server】不存在!')

def my_fun(x, y):

print(x, y)

my_fun(x=1, 2)

答案:如果使用關鍵字引數的話,需要兩個引數均使用關鍵字引數 my_fun(x=1, y=2)

f = open('c:\\test.txt', wb)

f.write('i love fishc.com!\n')

f.close()

答案:

注意 open() 第二個引數是字串,應該 f = open("c:\\test.txt", 'wb')。wb不加雙引號 python 還以為是變數名呢,往上一找,艾瑪沒找著……引發nameerror 異常。由於開啟檔案失敗,接著下邊一連串與 f 相關的均會報同樣異常。

def my_fun1():

x = 5

def my_fun2():

x *= x

return x

return my_fun2()

my_fun1()

答案:閉包的知識大家還記得不? python 認為在內部函式的 x 是區域性變數的時候,外部函式的 x 就被遮蔽了起來,所以執行 x *= x 的時候,在右邊根本就找不到區域性變數 x 的值,因此報錯。

在 python3 之前沒有直接的解決方案,只能間接地通過容器型別來存放,因為容器型別不是放在棧裡,所以不會被「遮蔽」掉。容器型別這個詞兒大家是不是似曾相識?我

們之前介紹的字串、列表、元祖,這些啥都可以往裡的扔的就是容器型別啦。

於是乎我們可以把**改造為:

def my_fun1():

x = [5]

def my_fun2():

x[0] *= x[0]

return x[0]

return my_fun2()

my_fun1()

但是到了 python3 的世界裡,又有了不少的改進,如果我們希望在內部函式裡可以修改外部函式裡的區域性變數的值,那麼也有乙個關鍵字可以使用,就是 nonlocal :

def my_fun1():

x = 5

def my_fun2():

nonlocal x

x *= x

return x

return my_fun2()

my_fun1()

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

目錄 一 什麼是異常?二 異常的總結 三 課時32課後習題及答案 一 什麼是異常?程式出現邏輯錯誤或者使用者輸入不合法都會引起異常,但這些異常並不是致命的,不會導致程式崩潰死掉。可以利用python提供的異常處理機制,在異常出現的時候及時捕獲,並從內部消化掉。那麼什麼是異常呢?舉個例子 file n...

010講python 異常處理

一.對error的認識 exception 1.錯誤的解釋 assertionerror斷言 assert 語句的失敗 indexerror值超過索引的範圍 keyerror 從字典中查詢易個不存在的元素 nameerror 訪問乙個不存在的變數 oserror 作業系統的異常 開啟乙個不存在的檔案...

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

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