Python 迭代器,錯誤、異常處理


 

迭代器

迭代器可以用來遍歷字符串、列表、元組、集合、字典。

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:
    #處理  可以調用我們重寫的方法來處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM