python学习--迭代器和异常处理

Posted 差不多努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习--迭代器和异常处理相关的知识,希望对你有一定的参考价值。

一、迭代器

  Python迭代器

简介:可以被 next() 函数调用并不断返回下一个值的对象成为迭代器

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

  next(): 调用迭代器中迭代对象

    >所有可直接作用于 for 循环的数据类型都是迭代对象

    >所有使用next() 方法的函数都是迭代器类型

    >集合(set) 数据类型是迭代器对象但不是迭代器,不过可以通过 iter()

  方法获得一个迭代器对象。

代码:

1.

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

运行结果:

E:python_VS_codedirectory[目录]>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_codedirectory[目录]>D://py3.6//python.exe e:/python_VS_code/directory[目录]/demo0801/py_flie.py
--陕西--
|--西安
|--咸阳
|--榆林
|--铜川
----------------------------------------
--河南--
|--郑州
|--开封
|--安阳
|--商丘
----------------------------------------
--湖北--
|--武汉
|--黄冈
|--周口
|--禹州
----------------------------------------
结束

结果可见:使用循环遍历字典信息

 

二、异常处理

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_codedirectory[目录]>D://py3.6//python.exe e:/python_VS_code/directory[目录]/demo0801/py_except(multi).py
请输入第一个数10
请输入第二个数0
除数不能为零
程序执行结束
除数不能为零
程序执行结束

E:python_VS_codedirectory[目录]>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_codedirectory[目录]>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

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

 

 



以上是关于python学习--迭代器和异常处理的主要内容,如果未能解决你的问题,请参考以下文章

python全栈学习总结五:迭代器和生成器

python基础--异常,对象和迭代器

流畅的python第十四章可迭代的对象,迭代器和生成器学习记录

python函数:迭代器和生成器

python函数:迭代器和生成器

流畅python学习笔记:第十四章:迭代器和生成器