Python'ValueError:I/O closed file上的操作,同时在循环中获取输入(我没有打开任何文件)

2024-10-03 09:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在我们开始之前,这个问题只发生在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()函数时,它仍然会给我相同的错误

我真的不知道发生了什么,因为我不使用任何文件来运行它,我的代码也不涉及任何打开或关闭文件

谢谢你抽出时间


Tags: runinpyselfhomeapplicationliblocal