2014-01-29 77 views
1

通读fileinput上的文档,但我在某处发生了基本错误,我希望有人能指出我的错误。RuntimeError:input()已经处于活动状态 - 文件循环

通过列表文件中的循环:

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

在第二个循环,它抛出

raise RuntimeError, "input() already active" 

思想的.next()是移动到第二行

回答

4

当您尝试遍历由fileinput.input返回同一文件的重开实例,同时通过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 

您可以使用fileinput.FileInput同时使用多个实例。此代码工作正常:

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

注意,如@Tim Pietzcker已经在他的回答中指出,for循环在fileinput实例已经在同一时间返回一行(代码中的变量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. 
0

正确的函数for循环已经逐行迭代,所以调用.next()会导致问题。只要删除该行。

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

为什么调用'.next'会导致问题?它应该简单地返回下一行或者引发'StopIteration'错误。 –

+0

至少它会导致每个其他线路被跳过。谁知道是什么导致... –

+0

它不会导致'RuntimeError'肯定:),结帐我的答案。 –

相关问题