超出范围时为什么fileinput.input对象没有丢失?

帕特里克·B。

在下面的代码中,我期望在中间循环fileinput.inputpython释放出来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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么将对象作为指针传递但不在返回范围时超出范围

为什么我的变量没有超出范围?

为什么有时我的字符串索引超出范围?

为什么在打印列表时没有错误时出现IndexError:字符串索引超出范围?

在遍历字符串时,为什么我没有超出范围错误,即使我已经超出了它的长度?

超出范围时使用对象?

当我的代码尝试用我的刽子手游戏中的字母替换丢失的字母时,为什么会出现“字符串索引超出范围”

当对象超出范围时执行一些代码

IndexOutOfRangeException,但没有超出范围

ArrayIndexOutOfBounds即使没有超出范围

因索引超出范围而崩溃——尽管我确定索引没有超出范围

对象的引用何时超出范围?

保留对超出范围对象的方法的引用

为什么索引超出范围

为什么struct变量超出范围

为什么矢量下标超出范围?

为什么会超出范围?

为什么光标索引超出范围?

为什么索引超出范围?

为什么此变量超出范围?

为什么索引超出范围?

为什么我的for循环超出范围?

为什么索引超出范围?(Python)

当结构对象超出范围时,如何删除结构对象内部的指针?

启动Ubuntu时出现错误消息“信号超出范围92KHz-58Hz”。有什么问题,我该如何解决?

本地对象超出范围后异步成员函数会发生什么?

子集R中的xts对象的值时超出范围错误

当指针超出范围时,由CComObject :: CreateInstance创建的COM对象不会被破坏

Python IndexError:使用列表作为可迭代对象时,列表索引超出范围