运行时错误:input()已处于活动状态-文件循环

2024-04-20 09:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

阅读有关fileinput的文档,但我在某个地方犯了一个基本错误,我希望有人能指出我的错误。

循环浏览文件中的列表:

finput = fileinput.input('file.txt')
for line in finput:
    // do something
    finput.next()
else:
    finput.close()

在它抛出的第二个循环中

 raise RuntimeError, "input() already active"

think.next()是移动到第二行的正确函数


Tags: 文件in文档txt列表forinput地方
2条回答

当试图在由fileinput.input返回的同一文件的重新打开的实例上循环时,如果fileinput.input返回的上一个实例仍未耗尽或显式关闭,则会引发此错误。因此,不能同时使用fileinput.input的多个实例实例。

来自^{}

The instance will be used as global state for the functions of this module, and is also returned to use during iteration.

import fileinput
finput = fileinput.input('abc1')
finput.next()
finput = fileinput.input('abc1')
finput.next()    

输出:

Traceback (most recent call last):
  File "so.py", line 5, in <module>
    finput = fileinput.input('abc1')
  File "/usr/lib/python2.7/fileinput.py", line 101, in input
    raise RuntimeError, "input() already active"
RuntimeError: input() already active

您可以使用^{}一次使用多个实例。此代码工作正常:

import fileinput
finput = fileinput.FileInput('abc1')
finput.next()
finput = fileinput.FileInput('abc1')
finput.next()    

注意,正如@Tim Pietzcker在他的回答中已经指出的那样,fileinput实例上的for循环已经一次返回一行(在您的代码中,变量line是实际的行),因此,那里不需要.next调用。在循环中调用.next可能会在文件对象耗尽时引发StopIteration错误。

import fileinput
finput = fileinput.input('abc1')
for line in finput:
    print line,           #current line returned by the for-loop
    print finput.next()  #Fetch the next line manually.

for循环已经逐行迭代,因此调用.next()会导致问题。把那条线去掉。

finput = fileinput.input('file.txt')
for line in finput:
    // do something
finput.close()

相关问题 更多 >