[英]Why is there a KeyError when the dictionary has the key?
我正在创建一个简单的烧瓶应用程序来存储 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'
打印出字典,看起来是这样的:
{'room': 'test', 'game': 'test'}
我的代码如下所示:
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')
该KeyError
是引发readJSON
的格式化时:
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
也发生了变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.