在下面的代码中,我期望在中间循环fileinput.input
时python释放出来,return
因为它超出了范围。但是,当再次调用我的函数fileinput告诉我
raise RuntimeError, "input() already active"
这是我的代码:
def func(inplace):
for line in fileinput.input(sys.argv[1], inplace=inplace):
[..]
if condition:
return True
[..]
if func(False):
func(True)
我希望在使用时会出现这种情况,yield
但在使用return时不会。
我正在使用Python 2.7.3。
有什么方法可以强制重置文件输入吗?
编辑:
fileinput.close()
在返回之前打电话时可以使用。为什么没有隐式完成?
编辑2:感谢@MatsLindh
更换
for line in fileinput.input(sys.argv[1], inplace=inplace):
与
for line in fileinput.FileInput(sys.argv[1], inplace=inplace):
做我想要的,因为它返回一个对象,该对象以定义的方式超出范围。我以为fileinput.input()
是那样,但是没有。它正在使用全局实例。
这里没有什么可以超出范围的-您正在已导入的模块中调用函数,并且fileinput
该模块是具有全局状态的模块之一,因为将来对fileinput
映射的调用将映射到先前进行的input
调用。
您应该可以通过使用FileInput
类来解决此问题,该类将在下次调用时重新创建,func()
并with
与该对象一起使用。
或-如您所知,调用close()
会重置内部模块状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句