可迭代对象
# 迭代
迭代即更新换代的意思,每次更新都必须依赖于上一次的结果
""" 提供了一种不依赖索引取值的方式 """
# 可迭代对象
内置有__iter__都可称为可迭代对象
"""
针对双下划线开头,双下划下标结尾的方法
最为专业的读法为双下方法名 eg:双下iter
"""
"""
最常见的含有__iter__的有:
字符串、列表、字典、元组、集合、文件对象
"""
d = ['jaosn', 'tony', 'jerry']
print(d.__iter__())
print(d.__len__())
print(iter(d))
print(len(d))
"""
可迭代对象调用__iter__,就变成了迭代器对象(老母猪)
__iter__可以简写为iter()
一般双下法都有一个对应的简化版本 方法名()
"""

迭代器对象
"""
迭代器对象:
即含有__iter__还含有__next__方法
如何生成迭代器对象:
在使用__iter__后即为迭代器对象
文件对象本身即是可迭代对象又是迭代器对象
迭代器对象无论使用多少次的__iter__后都为迭代器对象
迭代器对象给我们提供了不依赖与索引取值的方式
"""
d = ['jaosn', 'tony', 'jerry']
res = d.__iter()
print(res.__next__())
# 迭代器对象执行__next__方法其实就是在迭代取值(for循环)

for循环的本质
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 循环打印出列表中每个元素 但是不能使用for循环 __next__() next()
# 1.先将列表转为迭代器对象
res = l1.__iter__()
# 2.循环执行__next__取值
while True:
print(res.__next__())
for i in l1:
print(i)
"""
for循环内部原理
1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
2.循环执行__next__方法
3.取完之后__next__会报错 但是for循环会自动捕获该错误并处理
res = 数据.__iter__()
while True:
检测代码是否会报错
res.__next__()
如果报错了则自动处理掉并结束while循环
"""
### for循环本质
```python
d = {'name':'jason','pwd':123,'hobby':'read'}
res = d.__iter__() # StopIteration
while True:
try:
print(res.__next__())
except StopIteration as e:
break

异常捕获
# 什么是异常??
指的是代码运行出错会导致异常 异常发生后如果没有解决方案则会导致整个程序结束。
# 异常的三个重要组成部分
1.traceback
在报错内容最底下,点击往上数的第一个蓝色字体,即可跳转到有误的代码处。
2.XXXError
错误的类型
3.错误类型冒号后的内容
错误的详细原因(很重要,看完之后可能找到解决办法)
# 错误的种类
1.语法错误
不被允许的错误,出现立刻修改!
2.逻辑错误
可以被允许的,出现后修改即可
""" 修改逻辑错误的过程其实就是在重头到尾理清思路的过程 """
print(name) # NameError
l = [11,22,33]
print(l[100]) # IndexError
d = {'username':'jason'}
print(d['xxx']) # KeyError
int('abc') # ValueError
"""
基本语法结构
try:
有可能会出错的代码
except 错误类型 as e:
出错之后对应的处理机制(e是错误的详细信息)
except 错误类型 as e:
出错之后对应的处理机制(e是错误的详细信息)
except 错误类型 as e:
出错之后对应的处理机制(e是错误的详细信息)
"""
# 怎么修改
try:
int(abc)
except ValueError:
print('值不是纯数字')
# 使用后在整数中写其他数据,都不会报错,只会提示
" 万能异常 "
try:
'输入想要不报错的数据'
except Exception:
print('内容有误')
异常捕获句式和万能异常:
1.有可能出现错误的代码才需要监测
2.有监测的代码越少越好
3.异常捕获使用的频率越低越好
try:
被监测的代码
except 错误类型 as e:
...
else:
被监测的代码不报错的时候执行
finally:
无论是否报错最终都会执行
# 断言(了解)
name = 'jason'
assert isinstance(name,str)
# 主动报异常
raise 错误类型