當您嘗試遍歷由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.
爲什麼調用'.next'會導致問題?它應該簡單地返回下一行或者引發'StopIteration'錯誤。 –
至少它會導致每個其他線路被跳過。誰知道是什麼導致... –
它不會導致'RuntimeError'肯定:),結帳我的答案。 –