在我们开始之前,这个问题只发生在linux设备上,当我在Windows上尝试它时,它工作得非常好,下面是一些规范
OS: Ubuntu 20.04
Python Version: Python 3.9.2
无论如何,问题是,当我在循环中第二次尝试获取输入时,它会给我一个“ValueError:I/O operation on closed file”,即使我不使用任何文件。以下是错误:
Traceback (most recent call last):
File "/home/joshgil/Codes/Connect4/main.py", line 22, in <module>
main()
File "/home/joshgil/Codes/Connect4/main.py", line 17, in main
menu.print_main_menu()
File "/home/joshgil/Codes/Connect4/menu.py", line 76, in print_main_menu
game = Game()
File "/home/joshgil/Codes/Connect4/Game.py", line 63, in __init__
game_actions[action]()
File "/home/joshgil/Codes/Connect4/Game.py", line 42, in _play_local_action
response = create_or_join_actions[create_or_join]()
File "/home/joshgil/Codes/Connect4/Game.py", line 98, in _create_game
answer = inquirer.text(
File "/home/joshgil/.local/lib/python3.9/site-packages/InquirerPy/prompts/input.py", line 201, in execute
result = self._session.prompt(default=self._default)
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/shortcuts/prompt.py", line 1020, in prompt
return self.app.run(
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/application/application.py", line 887, in run
return loop.run_until_complete(
File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
return future.result()
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/application/application.py", line 816, in run_async
return await _run_async2()
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/application/application.py", line 792, in _run_async2
result = await _run_async()
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/application/application.py", line 721, in _run_async
with self.input.raw_mode(), self.input.attach(
File "/home/joshgil/.local/lib/python3.9/site-packages/prompt_toolkit/input/vt100.py", line 129, in raw_mode
return raw_mode(self.stdin.fileno())
ValueError: I/O operation on closed file
下面是创建此错误的代码
while (True):
if (len(self._user_requesting) == 0):
continue
for index, user in self._user_requesting.items():
user = UserSettingsSchema().load(user)
accept = ''
# Errors out here on the second while(True) loop iteration
answer = inquirer.text(
message= f'The user "{user.username}" is requesting to join, accept request?',
validate= lambda text: text.lower() in ['y', 'yes', 'n', 'no'],
invalid_message= 'Please answer with a yes or no (y/n)'
).execute()
if (accept.lower() in ['yes', 'y']):
self._user_requesting = []
self._opponent = user
sock.send_str('accepted', user.private_topic)
break
else:
sock.send_str('declined', user.private_topic)
self._user_requesting[user.private_topic] = None
print(f'The user "{user.username}" is declined ...')
print('Waiting for a user to connect ...')
continue
else:
self._user_requesting = dict(filter(lambda x: x[1] != None, self._user_requesting.items()))
如果要查看整个代码,请执行以下操作: https://github.com/JoshuaPelealu/Connect4/blob/master/Game.py
我使用的是InquirePy,但这与错误没有任何关系,因为当我使用本机input()
函数时,它仍然会给我相同的错误
我真的不知道发生了什么,因为我不使用任何文件来运行它,我的代码也不涉及任何打开或关闭文件
谢谢你抽出时间
目前没有回答
相关问题 更多 >
编程相关推荐