可迭代对象、迭代器对象、异常捕获
可迭代对象
可迭代对象都有一个特点,对象内置__iter__
方法,可以通过dir(对象)
查看,也可以通过pycharm,在变量名后点一下.
查看有没有这个内置方法。
可迭代对象的分类
-
不可迭代的对象
int float bool 函数对象
-
可迭代对象
str list dict tuple set 文件对象
可迭代的含义
迭代,依赖上一次的结果,来更新下一次。
如以下一段代码:
count = 1
total = 0
while count < 10:
total += 1 # debug这段代码,每次循环中total都根据上一次更新
count +=1
print(total) # 45
迭代器对象
可迭代对象通过__iter__
方法产生的对象叫做的迭代器对象。
迭代器对象拥有__iter__
方法和__next__
方法。
迭代器对象提供了一种不依赖索引取值的方式,就是依次的取出迭代值。
迭代器对象操作
s1 = 'hello' # 可迭代对象
res = s1.__iter__() # 通过iter产生迭代器对象
print(res.__next__()) # h # next指迭代向后一个个取值
print(res.__next__()) # l # 每执行一次next就向后迭代一次。
# 上述代码中,是可迭代对象的iter方法
# 而迭代器的iter方法是用来干什么的呢。
s1 = 'hello' # 可迭代对象
res = s1.__iter__().__iter__() # 通过iter产生迭代器对象,再次执行iter
print(res.__next__()) # h # 依然可以通过next取值
# 迭代器通过__iter__还是迭代器
注意:一旦__next__取不到值了,就会报错
for 循环的本质
for 变量名 in 可迭代对象\迭代器对象:
循环体代码
- 对in后面的对象执行
__iter__
方法得到迭代器对象 - while循环调用
__next__
取值,赋值给变量名 - 取到最后,next取不出来的报错会被捕获,这个要涉及到下文的异常捕获
异常捕获
异常以及异常类型
异常就是代码运行报错,行业俗语叫bug。
代码运行中一旦遇到异常会直接结束整个程序的运行,我们在编写代码的过程中药尽可能避免。
代码报错有两种:
-
语法错误
语法错误是明眼人一眼能够看出来的,语法这是程序员的基础技能,不容有错
-
逻辑错误
一眼可能看不出来,需要经验积累能感知到可能有的逻辑错误。
比方说,上文变量经过分支可能被赋值为一个字符串类型的数据,但是在后面执行了一个列表的内置方法报错了。
异常结构
- 异常位置
- 异常类型
- 异常详情