Я использую Python 2.5. Я пытаюсь использовать это выражение «с».
from __future__ import with_statement
a = []
with open('exampletxt.txt','r') as f:
while True:
a.append(f.next().strip().split())
print a
Содержимое файла exampletxt.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 для итераторов, но я хотел реализовать цикл while внутри генератора, который вызывается циклом for ... что-то как
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)