ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python - 可迭代/迭代器对象、for循环原理、异常捕获

2021-11-19 22:33:03  阅读:120  来源: 互联网

标签:__ .__ 迭代 python 捕获 iter next print


目录
image

可迭代对象与迭代器对象

  • 迭代:迭代的意思就是更新换代,每次的更新都必须依赖上一次的结果

  • 迭代其实给我们提供了一种不依赖索引取值的方式

  • 可迭代对象:

    内置有 _ _ iter _ _方法的都称为可迭代对象

    有字符串、列表、元组、字典、集合、文件对象

  • 迭代器对象:

    内置有 _ _iter _ _ 方法,又含有 _ _next _ _方法称为迭代器对象

  • 文件本身即是可迭代对象,也是迭代器对象

  • 可迭代对象调用_ _iter _ _方法就会变成迭代器对象

  • 迭代器对象在执行_ _next _ _方法就相当于遍历了一次对象,遍历完再执行会出错

实例如下:

# 列表举例
l = [1,2,3,4]
# 转换成迭代器对象
res = l.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
'''等于遍历了4次列表'''
# 如果再遍历一次就会出错
print(res.__next__())
#出错:StopIteration

# 区分开
l = [1,2,3,4]
# 这样用于取得就是第一个元素
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())

for循环本质

image

  • 相当于迭代器执行了若干次双下next方法,但是有退出,不会报错
  • for循环结束python解释器会自动捕获错误,并退出
# 演示for循环的底层原理
'''从可以遍历>>>>>遍历结束不报错'''
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 要求:循环打印出列表中每个元素 但是不能使用for循环  __next__()
# 转换成迭代器对象
res = l1.__iter__()
# 没有自动捕获该错误并处理版本
#  while True:
#      print(res.__next__())

# 升级,可以正常退出
n = 0
while n<len(l1):
    print(res.__next__())
    n+=1

# 可以捕获异常,并处理
while True:
    try:
        print(res.__next__())
    except Exception:
        print('for循环结束')
        break

由上面可知,异常处理的重要性,推出下面的异常处理初始!

异常处理

image

调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正;另一方面,有些异常是不可避免的,但我们可以对异常进行捕获处理,防止程序终止。

异常的组成:

  1. traceback
    翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行
  2. XXXError
    错误的类型
  3. 错误类型冒号后面的内容
    错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)

异常错误的分类:

  1. 语法错误
    • 不被允许的 出现了应该立刻修改!!!

实例如下:

if 1>2
for i in rage(10)
'''类似这种没有加冒号,缺胳膊断腿的操作属于语法错误'''
SyntaxError: invalid syntax
  1. 逻辑错误

    • 可以被允许的 出现了之后尽快修改即可

    • 修改逻辑错误的过程其实就是在从头到尾理清思路的过程

逻辑错误包括了名字错误,值错误等······

详细错误类型点这了解

标签:__,.__,迭代,python,捕获,iter,next,print
来源: https://www.cnblogs.com/48xz/p/15579567.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有