2020年9月16日星期三

[課後作業] 第032講:異常處理:你不可能總是對的|課後測試題及答案

[課後作業] 第032講:異常處理:你不可能總是對的|課後測試題及答案




《零基礎入門學習Python》視頻下載地址:傳送門Q9p_]7Z+MG
1j98.2x#'En%&6QkpqXR!*<TY=dV>
測試題:權屬於:bbs.fishc.com
~8i<apfRzuB5)= XVcT6eW9j^b
0.結合你自身的編程經驗,總結下異常處理機制的重要性?>[ s&a)
c%:IhXH5`xFQ|R"O]WqvL39,@umnJ
以下題目可以參考(http://bbs.fishc.com/thread-45814-1-1.html),但要求不使用IDLE直接獲得答案。 sF.fx
P%i1'UQvM =j5r786F{SC-4RY,kt
1.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:

  1. >>> my_list = [1, 2, 3, 4,,]
複製代碼

q.;_$9r2JcUV[yFlRahLg%1TP~jEe
2.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. >>> my_list = [1, 2, 3, 4, 5]
  2. >>> print(my_list[len(my_list)])
複製代碼

l>8^Idt|Mz,E:ZuDr;ch[
3.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. >>> my_list = [3, 5, 1, 4, 2]
  2. >>> my_list.sorted()
複製代碼

WimYJVe(Za30SN)$:k|GML6,tc{
4.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. >>> my_dict = {'host': 'http://bbs.fishc.com', 'port': '80'}
  2. >>> print(my_dict['server'])
複製代碼

xQta]oDgl*?qh)S#.=^OrBWN}V_Ic
5.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. def my_fun(x, y):
  2.         print(x, y)

  3. my_fun(x=1, 2)
複製代碼

AzuY0DW%~^M'L5r3IvRbZtg{QpH6
6.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. f = open('C:\\test.txt', wb)
  2. f.write('I love FishC.com!\n')
  3. f.close()
複製代碼

S=ZVBdCzLIo)x`g.!XP3ab
7.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:
  1. def my_fun1():
  2.         x = 5
  3.         def my_fun2():
  4.                 x *= x
  5.                 return x
  6.         return my_fun2()

  7. my_fun1()
複製代碼

pvZTW!=>{ykn9<hgx5'_CfOcz
8.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

回复您的答案即可查看參考答案!n6>t%BsyG$
?Rj~avN0dXqC]-FVWy6Psk%#)f`;1o
41@Dai^}R8gq#)>KrfHcET`eMn={5
測試題答案:來自:bbs.fishc.com

本帖隱藏的內容

來自:bbs.fishc.com
0.結合你自身的編程經驗,總結下異常處理機制的重要性?8vap>[r-5M
6ZIjLu^lRF.,NW2;z0xTps7h[
答:由於環境的不確定性和用戶操作的不可以預知性都可能導致程序出現各種問題,因此異常機制最重要的無非就是:增強程序的健壯性和用戶體驗,盡可能的捕獲所有預知的異常並寫好處理的代碼,當異常出現的時候,程序自動消化並恢復正常(不至於崩潰)。|j=N0AOq7p
xvHOIy5J,;|W#[($E.?w1
以下題目可以參考(http://bbs.fishc.com/thread-45814-1-1.html),但要求不使用IDLE直接獲得答案。 1JXAUMza
-AZ9<:yrE]hFJtcRQuVsa
1.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:A6o<V
  1. >>> my_list = [1, 2, 3, 4,,]
複製代碼

答:語法錯誤版權屬於:bbs.fishc.com
SyntaxError: invalid syntax ^ZHA!
`L-_gAN9t,vOq+pVb:@C>M{ l2w0
Q0JXgdB3rT)Zw{DGeb&Yk-}^$
2.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:;5dLE?h{
  1. >>> my_list = [1, 2, 3, 4, 5]
  2. >>> print(my_list[len(my_list)])
複製代碼

答:len(my_list)是獲得列表的長度,這里長度為5,該列表各個元素的訪問索引號分別是:[0, 1, 2, 3, 4],因此試圖訪問my_list(5)會引發IndexError : list index out of range異常。XdKJ'
v5"<dlm4-%QMo~h,.3:E7TR
52%W)pRNJrBt1E#IF*Cw
3.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:mpWh:`s (M
  1. >>> my_list = [3, 5, 1, 4, 2]
  2. >>> my_list.sorted()
複製代碼

答:初學者容易疏忽的錯誤,列表的排序方法叫list.sort(),sorted()是BIF。因此會引發AttributeError: 'list' object has no attribute 'sorted'異常。HItK=>Z}G
>CZY.p6eh^5,tObE#o3jg
khg i01THOX-pt9D;F{aK
4.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:?kKt^V}
  1. >>> my_dict = {'host': 'http://bbs.fishc.com', 'port': '80'}
  2. >>> print(my_dict['server'])
複製代碼

答:嘗試訪問字典中一個不存在的“鍵”引發KeyError: 'server'異常,為了避免這個異常發生,可以使用dict.get()方法:9Cb&KS_~n
  1. if not my_dict.get('server'):
  2.         print('您所訪問的鍵【server】不存在!')
複製代碼

zn[sFYG2xo$#B30r6Q*LEAi
5.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:1]}psG7
  1. def my_fun(x, y):
  2.         print(x, y)

  3. my_fun(x=1, 2)
複製代碼

答:如果使用關鍵字參數的話,需要兩個參數均使用關鍵字參數my_fun(x=1, y=2) DZ4`!C(
jZb7vsQPT`iU<]4z6{V!Xqp.R(:y
T4d[ $2;w'iK3_oz~M8%n!tUJr
6.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:GJS{F
  1. f = open('C:\\test.txt', wb)
  2. f.write('I love FishC.com!\n')
  3. f.close()
複製代碼

答:注意open()第二個參數是字符串,應該f = open('C:\\test.txt', 'wb') 。wb不加雙引號Python還以為是變量名呢,往上一找,艾瑪沒找著……引發NameError異常。由於打開文件失敗,接著下邊一連串與f相關的均會報同樣異常。Yy<(|L3W]
b#M` s+]"tdi>z@-BGX^hO|[
mH')"Lxh2lwV^8]<}s,yT:@ivOgRM
7.請問以下代碼是否會產生異常,如果會的話,請寫出異常的名稱:z?L x
  1. def my_fun1():
  2.         x = 5
  3.         def my_fun2():
  4.                 x *= x
  5.                 return x
  6.         return my_fun2()

  7. my_fun1()
複製代碼

答:閉包的知識大家還記得不?Python認為在內部函數的x是局部變量的時候,外部函數的x就被屏蔽了起來,所以執行x *= x的時候,在右邊根本就找不到局部變量x的值,因此報錯。5%e1xW,u+
9`oFwVhEBi}O_b~!TWe$P
在Python3之前沒有直接的解決方案,只能間接地通過容器類型來存放,因為容器類型不是放在棧裡,所以不會被“屏蔽”掉。容器類型這個詞兒大家是不是似曾相識?我們之前介紹的字符串、列表、元祖,這些啥都可以往裡的扔的就是容器類型啦。u,gS>^
s^;CB1W#0x kw?c)&8d(j<_3
於是乎我們可以把代碼改造為:來自:bbs.fishc.com
  1. def my_fun1():
  2.         x = [5]
  3.         def my_fun2():
  4.                 x[0] *= x[0]
  5.                 return x[0]
  6.         return my_fun2()

  7. my_fun1()
複製代碼

YdLZ3&w.7XoVSlUO"`@a
但是到了Python3的世界裡,又有了不少的改進,如果我們希望在內部函數里可以修改外部函數里的局部變量的值,那麼也有一個關鍵字可以使用,就是nonlocal :uC{L$J)1%E
  1. def my_fun1():
  2.         x = 5
  3.         def my_fun2():
  4.                 nonlocal x
  5.                 x *= x
  6.                 return x
  7.         return my_fun2()

  8. my_fun1()
複製代碼


8.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^


 Python標準異常總結


AssertionError斷言語句(assert)失敗
AttributeError嘗試訪問未知的對象屬性
EOFError用戶輸入文件末尾標誌EOF(Ctrl+d)
FloatingPointError浮點計算錯誤
GeneratorExitgenerator.close()方法被調用的時候
ImportError導入模塊失敗的時候
IndexError索引超出序列的範圍
KeyError字典中查找一個不存在的關鍵字
KeyboardInterrupt用戶輸入中斷鍵(Ctrl+c)
MemoryError內存溢出(可通過刪除對象釋放內存)
NameError嘗試訪問一個不存在的變量
NotImplementedError尚未實現的方法
OSError操作系統產生的異常(例如打開一個不存在的文件)
OverflowError數值運算超出最大限制
ReferenceError弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象
RuntimeError一般的運行時錯誤
StopIteration迭代器沒有更多的值
SyntaxErrorPython的語法錯誤
IndentationError縮進錯誤
TabErrorTab和空格混合使用
SystemErrorPython編譯器系統錯誤
SystemExitPython編譯器進程被關閉
TypeError不同類型間的無效操作
UnboundLocalError訪問一個未初始化的本地變量(NameError的子類)
UnicodeErrorUnicode相關的錯誤(ValueError的子類)
UnicodeEncodeErrorUnicode編碼時的錯誤(UnicodeError的子類)
UnicodeDecodeErrorUnicode解碼時的錯誤(UnicodeError的子類)
UnicodeTranslateErrorUnicode轉換時的錯誤(UnicodeError的子類)
ValueError傳入無效的參數
ZeroDivisionError除數為零



0 留言:

發佈留言