caicaix

导航

迭代器和异常捕捉

可迭代对象

可迭代对象有:

字符串、列表、元组、字典、集合等,文件也是可迭代对象

整型、浮点型、布尔值都不是

 

迭代器对象

迭代器对象有: str、list、dict、tuple、set、文件等

1.迭代器

迭代器就是一种不依靠于索引取值的方式

一次调用可供持续取值,重新调用则会重置

1 l1 = [11, 33, 44, 5, 66]
2 res = l1.__iter__()
3 print(res.__next__())  # 11
4 print(res.__next__())  # 33
5 print(l1.__iter__().__next__())  # 11

 

异常捕获

异常就是错误发生的信号,如果不对此信号做正确处理,那么程序之后就不能正常运行

 

1.异常的分类

1.Traceback

是异常位置所在处,可以直接定位到异常发生的位置

2.XXXError

错误的类型

3.XXXError后面的详细信息

错误的描述,一般我们直接看错误的详细信息都可以定位原因

4.异常的类型

1.语法错误:坚决不允许,容易解决,借助于pycharm工具就可以很容易的定位到

2.逻辑错误:是允许出现的,但是我们在写代码的时候,尽量的避免逻辑错误

 

2.XXXError(类型)

1.NameError  变量名错误

2.IndexError  索引错误

3.KeyError  取值错误

4.ZeroDivisionError

 

3.解决错误

预测可能出现的错误提前让代码继续运行下去

语法结构:

try:

被检测的代码:一般是可能会发生的错误

except  错误类型  as  e:

发生这种类型需要执行的

except  Exception  as  e:    # 所有错误都执行

发生所有错误类型都执行的

else:

没有错误需执行的        #  不可单独和try使用

finally:

不管什么情况都执行的

 

4.断言

代码走到这一行,条件必须成立,如果不成立,下面的代码都不能走,直接就报错

assert  条件

 

测试题(不靠for打印列表内容)

方法一:

用while循环

1 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
2 res = l.__iter__()
3 while True:
4     try:
5         print(res.__next__())     # 打印列表所有值
6     except Exception:    # 直到读取完报错时,跳出循环结束读取
7         break

 

方法二:

用递归函数

1 l = [1, 2, 3, 4, 5, 6]
2 
3 res = l.__iter__()
4 def a(x):
5     try:
6         print(x.__next__())
7     except StopIteration:
8         return
9     a(x)

 

方法三:

娱乐一下用pop

 1 l = [1, 2, 3, 4, 5, 6]
 2 
 3 res = l.__iter__()
 4 
 5 def b(x):
 6     if len(x) == 0:
 7         return
 8     print(x.pop(0))
 9     b(x)
10 
11 b(l)

 

迭代取值和索引取值的对比

1.迭代取值

1.不依赖于索引取值

2.只能从左往右依次取值,不能重复取值

 

2.索引取值

1.必须依赖于索引取值

2.可以重复取值 

3.必须是容器类型

 

 

 

posted on 2023-06-02 21:41  菜CAIx  阅读(7)  评论(0编辑  收藏  举报