迭代器 迭代器可以用來遍歷字元串、列表、元組、集合、字典。 可以使用next()獲取下一個元素: 錯誤、異常處理 except語句 ecxcept語句用來捕獲、處理錯誤、異常。 as e as是關鍵字,e是e是捕獲的異常實例(對象),可以自己隨便取名。 如果異常處理中用不到捕獲的異常對象,可以不要a ...
迭代器
迭代器可以用來遍歷字元串、列表、元組、集合、字典。
myString="hello" myIter=iter(myString) ##iter()函數可以獲取元素集的一個迭代器 for i in myIter: #遍歷每個字元 print(i) myList=[1,2,3,4] myIter=iter(myList) for i in myIter: #遍歷列表、元組、集合 print(i) mySet={"name":"張三","age":18} myIter=iter(mySet) #字典比較特殊,獲取到的是key的迭代器 for i in myIter: #i表示一個key print(i) #輸出key print(mySet.get(i)) #輸出對應的value
可以使用next()獲取下一個元素:
myList=[1,2,3,4] myIter=iter(myList) i=next(myIter) #獲取迭代器中的下一個元素,參數是迭代器。最初指針指向第一個元素之前。 print(i) #1 print(next(myIter)) #2
錯誤、異常處理
try: print(2/0) #可能出現問題的語句塊 except Exception as e: #捕獲異常,try和except必須配對使用,如果有try,就必須要有except來捕獲處理。 print(e) #處理異常,如果不想處理,可使用raise再次拋出此異常,交給上一級程式單元來處理。 else: #可選,如果try語句塊沒有出問題,那麼try語句塊執行完畢就會自動執行else語句塊 print("no error and exception") finally: #可選,不管try語句出不出現問題,都會執行finally語句塊 print("over")
except語句
ecxcept語句用來捕獲、處理錯誤、異常。
a=input("請輸入被除數:") b=input("請輸入除數:") a=float(a) #從控制台輸入的都是String類型,需要強制轉換 b=float(b) try: print(a,"÷",b,"=",a/b) except ZeroDivisionError as e: #捕獲一個具體的異常。當然也可以直接捕獲Exception,即捕獲、處理所有的異常,但太籠統了,不方便對應處理異常。 print(e) #輸出異常信息
as e as是關鍵字,e是e是捕獲的異常實例(對象),可以自己隨便取名。
如果異常處理中用不到捕獲的異常對象,可以不要as部分:
except ZeroDivisionError: print("除數不能為0")
可以有多個except語句,但try語句塊出現問題時,只會執行一個except語句(靠前的匹配)。
try: #..... except ZeroDivisionError: print("除數不能為0") except FileExistsError: print("文件不存在") except IndexError: print("索引錯誤")
可以在一個except中捕獲、處理多種異常:
try: #.... except (ZeroDivisionError,FileExistsError,IndexError): #使用一個except捕獲多種異常時,需要使用元組形式 #...
捕獲所有種類的異常:
except Exception: #捕獲所有種類的異常 #...
如果是捕獲所有種類的異常,可以預設Exception,直接寫成except:
except: #...
raise語句
raise語句可以拋出一個異常:
def test(): print("start") raise FileExistsError #拋出一個FileExistsError異常,可根據需要選擇異常類 try: test() except Exception: #處理
可以自定義異常信息:
def test(): print("start") raise Exception("xxx錯誤") #括弧中寫自定義的異常信息 try: test() except Exception as e: print(e) #xxx錯誤 輸出我們自定義的異常信息
try語句塊中,一旦拋出了異常,不管是程式本身出問題拋出的異常,還是我們手動拋出的異常,try語句塊中後面的代碼都不再執行:
try: print("start") raise Exception print("end") #此句代碼不會執行 except Exception: print("exception")
使用了try,就必須要有except來捕獲、處理異常,如果不想處理或者已處理一部分、但還需要交給上一級程式單元來繼續處理,可以使用raise再次拋出異常。
在except語句中使用raise時,如果拋出的是當前捕獲的異常,可以直接寫成raise:
except ZeroDivisionError:
raise #把捕獲的異常拋給上一級的程式單元處理
我們也可以先做一些處理,再拋給上一級程式單元做進一步處理。
當然,我們也可以自定義異常類,拋出自定義的異常:
class MyException(Exception): #需要繼承Exception類 #根據需要重寫方法 try: #... raise MyException #拋出自定義的異常 except MyException as e: #處理 可以調用我們重寫的方法來處理