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'

结果可见:异常名可自定义,但仅是临时修改

相关文章
相关标签/搜索