【问题标题】:KeyError: EOFerror while taking input from userKeyError:从用户获取输入时出现 EOFerror
【发布时间】:2021-04-07 16:48:39
【问题描述】:

我正在开发一款游戏

  1. 询问有多少玩家。
  2. 要求用户选择游戏主题 向用户提问后
  3. 要求用户在 5 秒内提供答案。

我在第三步中遇到问题,特别是从用户那里获取输入。

我的代码如下所示: askAnswer() 用于要求用户提供输入。

def askAnswer():
    
    try:        
        ans = input("Enter Answer[A,B,C,D] ")
        tm.flag = True
        print("Here")
        return ans
    except Exception as e:
        print("In except.")
        return e

checkAnswer() 使用所有玩家提供的输入并分配分数。

def checkAnswer():
    for i in range(NumberOfPlayers):
        ans = askAnswer()
            if i == 0:
                if questions["questionbank"][index][ans] == answer:
                    print("test")
                    p1scr=p1scr+1

所以在我输入答案后我得到一个错误:

ERROR:app:Exception on /round [GET]
Traceback (most recent call last):
  File "/home/pi/env/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/pi/env/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/pi/env/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/pi/env/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/pi/env/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/pi/env/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app.py", line 221, in startRounds
    p1scr, p2scr, p3scr, p4scr= getAnswer(questions, answer, index)
  File "app.py", line 158, in getAnswer
    print(questions["questionbank"][index][ans])
KeyError: EOFError()

更新: 我正在使用omxplayer 播放声音。所以用户必须在 5 秒内提供输入。我认为omxplayer 控制不允许用户输入的命令行。有什么解决办法吗?如何让播放器在后台播放。

我不知道它是否存储输入。 我已经被这个问题困扰了很长时间。请告诉我有关如何克服此问题的任何想法。

【问题讨论】:

    标签: python python-3.x flask raspberry-pi raspberry-pi3


    【解决方案1】:

    首先,看看如果你跳过 checkAnswer() 和 for 循环,你是否仍然得到错误。如果是这样,请修改您的问题以关注获得错误所需的最少代码。如果没有,请修改您的问题以包含您所做的测试。

    接下来,在 input() 调用之后立即放置一条打印语句。只需打印一个静态字符串,而不是 ans。在您的 except 处理块中放置第二条语句,并打印不同的静态字符串。这将告诉您错误是在 input() 中还是在其他地方。

    第三,那个非常宽泛的“except Exception as e: return e”很可能隐藏了真正的错误。使其非常具体到您要处理的异常的行和类型。您几乎应该总是在异常处理程序中做一些不同的事情。返回异常或“通过”几乎总是会使现有问题变得更糟。如果您认为异常来自 input(),那应该是“try”和“except”之间的唯一行。将异常指定为“InputError”、“ValueError”或没有它引发的任何特定类型,并根据导致该错误的条件选择一个操作。

    【讨论】:

    • 太棒了。很多我不知道的事情。谢谢你。我会按照你所说的,并相应地更新我的帖子。
    • 我使用了您的第二个建议并更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多