gpt4 book ai didi

python - 将 python 'with' 语句与迭代器一起使用?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:03 25 4
gpt4 key购买 nike

我使用的是 Python 2.5。我正在尝试使用这个“with”语句。

from __future__ import with_statement
a = []
with open('exampletxt.txt','r') as f:
while True:
a.append(f.next().strip().split())
print a

'examplettxt.txt'的内容很简单:

a
b

在这种情况下,我得到错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/python-7036sVf.py", line 5, in <module>
a.append(f.next().strip().split())
StopIteration

如果我将 f.next() 替换为 f.read(),它似乎陷入了无限循环。

我想知道我是否必须编写一个接受迭代器对象作为参数的装饰器类,并为其定义一个 __exit__ 方法?

我知道对迭代器使用 for 循环更符合 pythonic,但我想在一个由 for 循环调用的生成器中实现一个 while 循环... 某事 like

def g(f):
while True:
x = f.next()
if test1(x):
a = x
elif test2(x):
b = f.next()
yield [a,x,b]

a = []
with open(filename) as f:
for x in g(f):
a.append(x)

最佳答案

提升 StopIteration 是迭代器到达末尾时所做的事情。通常 for 语句会默默地捕获它并继续到 else 子句,但是如果像您的情况一样手动迭代它,那么代码必须准备好自己处理异常.

关于python - 将 python 'with' 语句与迭代器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com