先補充些iter函式的用法:iter()其實就是乙個迭代器,引數可傳個list、dict等等,然後可通過呼叫next函式獲取下乙個元素,預設並未指向物件的第乙個元素,可理解為指向了第乙個元素的前面的位置。
第8課:異常處理
1、異常處理可以提高程式的容錯性
re = iter(range(4))迴圈到第6次,由於re.next()沒有元素返回了,會有stopiteration的異常。整個程式將會中斷。寫程式時,如果知道可能犯錯的地方或犯錯的型別,可以針對異常型別定義好'應急方案'for i in range(100):
re.next()
'hello
'
re = iter(range(5))將try中容易出錯的部分,後面跟上except,來說明如果try中發生stopiteration時,程式該做的事情,如果沒有發生異常,except部分將被跳過。try:
for i in range(100):
printre.next()
print 'hello'
exceptstopiteration:
print 'here is end',i
2、異常處理的完成語法結構:
try如果try中有異常發生,將執行except。異常層層比較,看是否是exception1, exception2...,直到找到其歸屬,執行相應的except中的語句。如果except後面沒有任何引數,那麼表示所有的exception都交給這段程式處理。比如::except
exception1:
except
exception2:
except:
......
else
:finally:
try:由於a沒有定義,所以是nameerror。異常最終被except:部分的程式捕捉。???print(a*2)
excepttypeerror:
print("typeerror")
except:
print("not type error & error noted")
3、如果無法將異常交給合適的物件,異常將繼續向上層丟擲,直到**捉或者造成主程式報錯。比如下面的程式
deftest_func():子程式的try...except...結構無法處理相應的除以0的錯誤,所以錯誤被拋給上層的主程式。try:
m = 1/0
exceptnameerror:
print("catch nameerror in the sub-function")
try:
test_func()
exceptzerodivisionerror:
print("catch error in the main program")
如果try中沒有異常,那麼except部分將跳過,執行
else中的語句。
finally是無論是否有異常,最後都要做的一些事情。
流程如下,
try->異常->except->finally
try->無異常->else->finally
我們也可以自己寫乙個丟擲異常的例子:
stopiteration是乙個類。丟擲異常時,會自動有乙個中間環節,就是生成stopiteration的乙個物件。python實際上丟擲的,是這個物件。當然,也可以自行生成物件:
raise stopiteration()其中上圖中想要列印出異常資訊『引數為空』 直接print e即可。
Python基礎學習總結 第8天
比較的是物件的值是否相等 is is not 比較的是物件的id是否相等 比較2個物件是否是同乙個物件 字典的作用和列表類似,都是用來儲存物件的容器 列表儲存資料的效能好,但是查詢資料的效能差,字典正好與之相反 在字典中每乙個元素都有唯一的名字,通過這個唯一的名字可以找到指定的元素 這個唯一的名字我...
學習Python第8天
物件是類的例項。換句話說,類主要定義物件的結構,然後我們以類為模板建立物件。類不但包含方法定義,而且還包含所有例項共享的資料。在 python 中定義私有變數只需要在變數名或函式名前加上 兩個下劃線,那麼這個函式或變數就會為私有的了。class derivedclassname baseclassn...
python學習筆記 第8天
繼續今天的python學習 昨天我們說到了多執行緒共享資料 全域性變數 那麼今天我們就緊接著來說一下多執行緒不共享資料的使用方式 import threading import time def test1 the number 0 for i in range 100 the number 1 t...