Django带Payload的GET请求出现KeyError异常求助
解决Django请求中Payload构造的KeyError问题
这问题出在你手动构造JSON字符串时,没正确处理Python str.format() 的占位符规则,让我给你拆解清楚:
问题根源
你写的payload代码是:
app_id = "Dert/dedff/12i=" payload = "{\n \"app_id\": \"{}\"\n}".format(app_id)
这里外层的{和}是JSON的语法符号,但在Python的str.format()方法里,{}会被识别为格式占位符,而非普通字符。当你调用.format(app_id)时,Python会扫描整个字符串里的所有{}:
- 你本来只想替换
"{}\"里的占位符,但JSON的外层大括号也被当成了占位符 - Python找不到对应外层占位符的参数,就抛出了
KeyError: "\n 'app_id'"(这个错误信息其实是Python尝试解析{后面的内容作为占位符名称时得到的)
解决方案
有两种靠谱的解决办法,更推荐第二种规范写法:
方式1:转义JSON的大括号
把JSON结构里的{改成{{,}改成}},这样str.format()会把它们解析成字面的大括号,只替换你指定的占位符:
app_id = "Dert/dedff/12i=" payload = "{{\n \"app_id\": \"{}\"\n}}".format(app_id)
方式2:使用json模块构造JSON(推荐)
手动拼接JSON字符串很容易踩坑,尤其是遇到特殊字符时。Python的json模块能自动处理格式和转义,省心又可靠:
import json app_id = "Dert/dedff/12i=" # 先构造Python字典 payload_data = {"app_id": app_id} # 转换成格式化的JSON字符串 payload = json.dumps(payload_data, indent=2)
这样生成的JSON格式绝对正确,哪怕app_id里有引号、斜杠这类特殊字符,json.dumps也会自动帮你转义。
验证效果
用第二种方式生成的payload和你预期的完全一致:
{ "app_id": "Dert/dedff/12i=" }
之后发起请求就不会再出现KeyError啦。
内容的提问来源于stack exchange,提问作者Sapna Sharma
相关产品推荐
相关产品推荐

