Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用request.POST.get时出现密钥错误_Python_Django - Fatal编程技术网

Python 使用request.POST.get时出现密钥错误

Python 使用request.POST.get时出现密钥错误,python,django,Python,Django,我正在尝试在未提供参数时让request.POST.get开始工作。我的理解是,在这种情况下,它返回None。然而,它抛出的错误与我使用请求时得到的错误相同。POST['key']:MultiValueDictKeyError:“'key'” 代码: 我也尝试过使用try/除了与request.POST['key'],但我在那里遇到了同样的问题。我怀疑这可能是由于我不熟悉Django和Python造成的,但任何建议都将不胜感激 我正在使用Django 1.6.5/Python 2.7。试着这样写

我正在尝试在未提供参数时让request.POST.get开始工作。我的理解是,在这种情况下,它返回
None
。然而,它抛出的错误与我使用请求时得到的错误相同。POST['key']:
MultiValueDictKeyError:“'key'”

代码:

我也尝试过使用
try
/
除了
request.POST['key']
,但我在那里遇到了同样的问题。我怀疑这可能是由于我不熟悉Django和Python造成的,但任何建议都将不胜感激


我正在使用Django 1.6.5/Python 2.7。

试着这样写:

def myRoute(request):
    if request.POST:
        data = request.POST.get('key', 'SomeDefaultValue')

使用
.get
方法不应抛出键错误;因此,如果问题仍然存在,请检查您的代码,因为问题可能在其他地方出现。

您可以为get方法提供默认值,如下所示:

data = request.POST.get('key', None) 
如果不存在值,则将数据设置为无。或者您可以自己检查该值:

if 'key' in request.POST:
    data = request.POST['key']
else:
    data = None

这是不可能的。Django
QueryDict
对象,即
request.POST
应该是,是
Django.util.MultiValueDict
的子类,它以通常的方式实现
get
。您确定这是引发异常的特定行吗?完整的回溯可能会有所帮助。我意识到我在回溯中看到了一些非常奇怪的东西——它总是引用相同的两行代码,不管它们是否被注释掉,甚至是否存在。重新启动机器修复了它,所以我不知道发生了什么。感谢您的帮助。
get
如果不提供默认值,则在必要时始终返回
None
——指定默认值不会改变任何内容。此外,
django.util.MultiValueDict中的
get
实现也执行
中的
检查-这两个表达式的作用与
data=request.POST.get('key')
相同。OP的问题几乎肯定在别处。你确定吗?指示.get只是一个带钩子的。如果未设置密钥,getitem将抛出错误。是的,我确定。如果不是,请检查源代码:
request.POST.get
不应抛出错误,因此它的使用方式是正确的irrelevant@PadraicCunningham我就是这么说的。。。我刚刚建议了另一种方法,使用if语句确保POST对象中有数据。是的,但我想指出的是,您不需要另一种方法,OP不共享其他内容,因为无论使用什么
。get
方法都不应该抛出keyrerror。
if 'key' in request.POST:
    data = request.POST['key']
else:
    data = None