可迭代对象
什么是迭代?
迭代就是更新换代,每一次的迭代都必需依赖上一次的结果。单纯的重复不是迭代
什么是可迭代对象?
内置有__iter__方法的都可以称之为是可迭代对象
属于可迭代对象的有
字符串、列表、字典、元组、集合、文件对象
可迭代对象其实就是为了后续迭代取值做准备
提供了不依赖于索引取值的方式
迭代器对象
什么是迭代器对象?
可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
迭代器的特征:含有__iter__方法和__next__方法
for循环内部原理for循环底层原理
for 变量名 in 可迭代对象:
循环体代码
- 会将in后面的数据调用__iter__()变成迭代器对象
为什么文件对象也可以for循环 因为本身就是迭代器对象 再次调用不变 - 针对产生的迭代器对象依次调用__next__()方法迭代取值
- 当值取完之后 会自动处理报错并退出循环
异常处理
什么是异常?
异常俗称bug,就是代码出错,代码出错程序就会停止执行。
异常信息的组成:
-
line关键字所在的一行
用于提示你代码哪一行出错了 点击前面的蓝色字体可以直接定位
‘’‘如果报错的信息很长 一般最后一个才是’’’ -
NameError错误的类型
代码的报错也可以分为很多类型 -
name ‘name’ is not defined
具体的报错原因(就是解决报错的答案)
异常的分类: -
语法异常:比如if语法 while语法
-
逻辑异常:
异常的类型:
Python常见异常类型大概分为以下类:1.AssertionError:当assert断言条件为假的时候抛出的异常
2.AttributeError:当访问的对象属性不存在的时候抛出的异常
3.IndexError:超出对象索引的范围时抛出的异常
4.KeyError:在字典中查找一个不存在的key抛出的异常
5.NameError:访问一个不存在的变量时抛出的异常
6.OSError:操作系统产生的异常
7.SyntaxError:语法错误时会抛出此异常
8.TypeError:类型错误,通常是不通类型之间的操作会出现此异常
9.ZeroDivisionError:进行数学运算时除数为0时会出现此异常
异常处理:
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
以下为简单的try…except…else的语法:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
for循环的本质
即先将遍历的对象用iter方法做成迭代器,再循环调用next方法拿到迭代器里参数的值,直到python捕捉到了StopIteration异常,这时终止循环,也就是for循环结束
# 利用while与异常捕获 实现for循环的功能
info = {'name': 'jason', 'age': 18, 'pwd': 123}
# 1.先转换成迭代器对象
# res = info.__iter__()
res = iter(info)
# 2.迭代取值
while True:
# print(res.__next__())
try:
print(next(res))
except StopIteration as e:
# 结束while循环
break
迭代取值和索引取值的对比
1.索引取值
优势:可以反复获取相同的元素 并且没有固定的方向
劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高
2.迭代取值
优势:兼容所有的容器类型
劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了