当您尝试遍历由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'肯定:),结帐我的答案。 –