2014-01-29 82 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'肯定:),結帳我的答案。 –

相關問題