python學習--迭代器和異常處理

1、迭代器python

  Python迭代器函數

簡介:能夠被 next() 函數調用並不斷返回下一個值的對象成爲迭代器spa

  iter() : 把可迭代對象 => 迭代器code

  next(): 調用迭代器中迭代對象對象

    >全部可直接做用於 for 循環的數據類型都是迭代對象blog

    >全部使用next() 方法的函數都是迭代器類型繼承

    >集合(set) 數據類型是迭代器對象但不是迭代器,不過能夠經過 iter()ci

  方法得到一個迭代器對象。input

代碼:it

1.

a = ['a','b','c'] a_iter =iter(a) print(next(a_iter)) print(next(a_iter))

運行結果:

E:\python_VS_code\directory[目錄]>D://py3.6//python.exe e:/python_VS_code/directory[目錄]/demo0801/demo01.py a b

結果可見:iter() 方法把列表轉換爲一個迭代器,next() 方法調用迭代器對象。

2.

>迭代器

>循環控制流程

>異常處理

代碼:

'''
城市信息展現 (省市級聯顯示) ''' dict_city = {'陝西':['西安','咸陽','榆林','銅川'], '河南':['鄭州','開封','安陽','商丘'], '湖北':['武漢','黃岡','周口','禹州']} dict_iter = iter(dict_city) dict_val = iter(dict_city.values()) while True: try: pro_name = next(dict_iter) print('--%s--'%pro_name) val = next(dict_val) val_name = iter(val) while True: try: print('|--%s'%next(val_name)) except StopIteration: print('--'*20) break except StopIteration: print('結束') break

運行結果:

E:\python_VS_code\directory[目錄]>D://py3.6//python.exe e:/python_VS_code/directory[目錄]/demo0801/py_flie.py --陝西--
|--西安 |--咸陽 |--榆林 |--銅川 ----------------------------------------
--河南--
|--鄭州 |--開封 |--安陽 |--商丘 ----------------------------------------
--湖北--
|--武漢 |--黃岡 |--周口 |--禹州 ---------------------------------------- 結束

結果可見:使用循環遍歷字典信息

 

2、異常處理

1. 

  try:      

    #  錯誤位置

  except  錯誤類型:

    # 捕獲錯誤,處理錯誤

  else:

    # 錯誤未發生,一切正常

  finally:

    # 不管錯誤有無發生,都執行

  異常書寫:

    try..except
      try...except...finally...
        try.....finally
          try..except..else
  :當 try 塊中某個語句發生異常,直接執行處理異常塊,
  當前 try 塊中的異常發生代碼以後的代碼再也不執行。
2.多異常處理
  異常捕獲 try...except....except....
代碼:
#得到兩個數值
num1=input("請輸入第一個數") num2=input("請輸入第二個數") # print(num1/num2) #相除的兩個數的轉換
try: a=int(num1) b=int(num2) a/b str1="a" info =str1[3] except ValueError: print("請輸入數字") except ZeroDivisionError: print("除數不能爲零") except: #任何異常的捕獲
    print("異常發生") finally: print("程序執行結束") #try 中捕獲異常 當任何異常均可處理的except處於第一個except 後續就不容許出現except
try: a=int(num1) b=int(num2) a/b str1="a" info =str1[3] except ValueError: print("請輸入數字") except ZeroDivisionError: print("除數不能爲零") except: #任何異常的捕獲
    print("異常發生") finally: print("程序執行結束")

運行結果:

E:\python_VS_code\directory[目錄]>D://py3.6//python.exe e:/python_VS_code/directory[目錄]/demo0801/py_except(multi).py 請輸入第一個數10 請輸入第二個數0 除數不能爲零 程序執行結束 除數不能爲零 程序執行結束 E:\python_VS_code\directory[目錄]>D://py3.6//python.exe e:/python_VS_code/directory[目錄]/demo0801/py_except(multi).py 請輸入第一個數a 請輸入第二個數2 請輸入數字 程序執行結束 請輸入數字 程序執行結束

結果可見: 兩個不一樣錯誤類型出現不一樣結果,多錯誤異常處理。


3.自定義異常

  raise... 發生異常

  自定義異常類

    繼承exception類
代碼:
class AgeExcept(Exception): pass age=1000 #年齡值

# 當年齡大於150異常
try: if age>150: raise AgeExcept('年齡。。。。') #認爲發生異常 手動
        # int('a')
except AgeExcept as ex : print(ex) print("異常發生 ") # 只是臨時自定義,並不是永久。
int('a')

運行結果:

E:\python_VS_code\directory[目錄]>D://py3.6//python.exe e:/python_VS_code/directory[目錄]/demo0801/py_except(custom).py 年齡。。。。 異常發生 Traceback (most recent call last): File "e:/python_VS_code/directory[目錄]/demo0801/py_except(custom).py", line 28, in <module> int('a') ValueError: invalid literal for int() with base 10: 'a'

結果可見:異常名可自定義,但僅是臨時修改

相關文章
相關標籤/搜索