python - 为什么字典有key的时候会出现KeyError?

标签 python

我正在创建一个简单的 Flask 应用程序来存储 JSON 文件并读取它们。应用程序应该返回一个我作为测试而制作的 JSON 文件。网址如下:http://IP:5000/?room=test&game=test。我收到此错误:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/pi/Desktop/python/universalgameserver.py", line 10, in api_set
    return json.loads(readJSON(request.args['room'], request.args['game']))
  File "/home/pi/Desktop/python/universalgameserver.py", line 17, in readJSON
    f = open("~/saves/${room}_${game}.json".format(room, game), "r")
KeyError: 'room'

打印出字典,看起来像这样:
{'房间': '测试', '游戏': '测试'}
我的代码如下所示:

from flask import Flask, request
import json
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def api_set():
    if request.method == "POST":
        writeJSON(request.form['room'], request.form['game'], request.form['json'])
    else:
        print(dict(request.args))
        return json.loads(readJSON(request.args['room'], request.args['game']))

def writeJSON(room, game, json):
    f = open("~/saves/${room}_${game}.json".format(room, game), "w")
    f.write(json)
    f.close()
def readJSON(room, game):
    f = open("~/saves/${room}_${game}.json".format(room, game), "r")
    contents = f.read()
    f.close()
    return contents
if __name__ == '__main__':
    app.run(host='192.168.0.36')

最佳答案

在格式化期间,readJSON 中引发了 KeyError:

f = open("~/saves/${room}_${game}.json".format(room, game), "r")

将其更改为:

如果在 Python 2 中:

f = open("~/saves/{0}_{1}.json".format(room, game), "r")

如果在 Python 3.6 或更高版本中,使用 f-string 可以轻松格式化:

f = open(f"~/saves/{room}_{game}.json", "r")

它会像魔法一样发挥作用!

附注

同样,也要更改 writeJSON

关于python - 为什么字典有key的时候会出现KeyError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63705255/

相关文章:

python - 直方图箱上的数学百分位。边缘错误

python - 如何在 Pandas 的数据框中组合两列?

python - 使用 SymPy 一般解析和求解方程

python - Docker 连接上的 RabbitMq 失败

python - set_language 在 django 国际化中不起作用

python - Django get_or_create,commit=False怎么说

python - 扭曲。 dns 回复中超过 1 个 IP 地址

python - 如何在 Python 中设置 AWS 凭证

c++ - 使用 boost::python 将回调从 python 传递到 c++

python - 从两列计算和创建百分比列