Python - 迭代器、异常处理

Python - 迭代器、异常处理

1.迭代器

迭代器为类序列对象提供了一个类序列的接口。python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。迭代器用起来很灵巧,你可以迭代不是序列但表现出序列行为的对象,例如字典的键、一个文件的行,等等。迭代器的作用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
i = iter('abcd')
print i.next()
print i.next()
print i.next()
s = {'one':1,'two':2,'three':3}
print s
m = iter(s)
print m.next()
print m.next()
print m.next()
>> a
>> b
>> c
>> {'three': 3, 'two': 2, 'one': 1}
>> three
>> two
>> one

2. 异常处理

在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过。

随后,程序将继续运行,而不是彻底中断。

1
2
3
4
5
6
7
8
9
re = iter(range(5))
try:
for i in range(100):
print re.next()
except StopIteration:
print 'here is end ',i
print 'HaHaHaHa'

如果无法将异常交给合适的对象,异常将继续向上层抛出,直到被捕捉或者造成主程序报错。比如下面的程序

1
2
3
4
5
6
7
8
9
10
def test_func():
try:
m = 1/0
except NameError:
print("Catch NameError in the sub-function")
try:
test_func()
except ZeroDivisionError:
print("Catch error in the main program")

子程序的try…except…结构无法处理相应的除以0的错误,所以错误被抛给上层的主程序。


如果try中没有异常,那么except部分将跳过,执行else中的语句。

finally是无论是否有异常,最后都要做的一些事情。

流程如下,

try->异常->except->finally

try->无异常->else->finally

我们也可以自己写一个抛出异常的例子:

1
2
3
print 'Lalala'
raise StopIteration
print 'Hahaha'

StopIteration是一个类。抛出异常时,会自动有一个中间环节,就是生成StopIteration的一个对象。Python实际上抛出的,是这个对象。当然,也可以自行生成对象:

1
raise StopIteration()
小明 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
0%