Python 3.x 使用input()对关闭的文件执行I/O操作

Python 3.x 使用input()对关闭的文件执行I/O操作,python-3.x,input,Python 3.x,Input,我有一些代码,可以设置运行和记录科学实验的环境。一些初始设置涉及使用内置的input()方法向用户查询值。然而,每当我试图调用输入时,我总是在关闭文件错误上得到一个I/O操作。 代码流:Control.py调用Analyzer.py,后者调用Prompts.py中的特定方法(代码如下) 我在互联网上到处搜索,一直找不到任何远程相关的东西。非常感谢你 您发布的代码似乎没有问题,错误可能在您的其他文件中 input()函数使用sys.stdout显示提示文本,并使用sys.stdin获取用户的输入文

我有一些代码,可以设置运行和记录科学实验的环境。一些初始设置涉及使用内置的input()方法向用户查询值。然而,每当我试图调用输入时,我总是在关闭文件错误上得到一个I/O操作。 代码流:Control.py调用Analyzer.py,后者调用Prompts.py中的特定方法(代码如下)


我在互联网上到处搜索,一直找不到任何远程相关的东西。非常感谢你

您发布的代码似乎没有问题,错误可能在您的其他文件中

input()
函数使用
sys.stdout
显示提示文本,并使用
sys.stdin
获取用户的输入文本

您收到的错误消息可能是由于其中一个文件被关闭所致,例如:

>>> import sys
>>> input('test: ')
test: hello
'hello'
>>> sys.stdin.close()
>>> input('test: ')
test: Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
导入系统 >>>输入('测试:') 测试:你好 “你好” >>>sys.stdin.close() >>>输入('测试:') 测试:回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:对关闭的文件执行I/O操作。 或:

导入系统 >>>输入('测试:') 测试:嗨 “嗨” >>>sys.stdout.close() >>>输入('测试:') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:对关闭的文件执行I/O操作。
我无法确切地告诉您在何处修复此问题,但请查找可能直接或间接关闭其中一个文件的内容(例如,上下文管理器)。

我从未在三个脚本中引用过sys.stdout。你能通过间接关闭来扩展你的意思吗。我使用with语句,但从不使用与sys相关的任何内容。@ZoePlaxco有没有办法将其他两个脚本简化为仍然复制问题的版本,并可以在此处共享?通过“间接”我的意思是,您不是在自己调用
.close()
,而是在幕后进行其他操作。一个例子(很傻,但你明白了)就是使用上下文管理器。谢谢!我发现在代码的其他地方有人调用了exit(),它在引擎盖下关闭了sys.stdoutf。对于可能遇到此问题的其他人,我发现在另一个早期的调用堆栈中调用exit(),导致了此错误。
>>> import sys
>>> input('test: ')
test: hello
'hello'
>>> sys.stdin.close()
>>> input('test: ')
test: Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
>>> import sys
>>> input('test: ')
test: hi
'hi'
>>> sys.stdout.close()
>>> input('test: ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.