gpt4 book ai didi

python - 为什么我不能得到这个简单的 Python 字典的键/值对?

转载 作者:行者123 更新时间:2023-11-28 20:45:56 25 4
gpt4 key购买 nike

我正在使用 Django-Rest-Framework 为 Django 应用程序构建一个 restful API。

在 viewset 函数中,我正在检查响应的值并试图找出我可以对其调用哪些方法。我通过打印简单的日志消息来做到这一点。但是,当我尝试在 QueryDict(毕竟只是一本字典)上调用这些方法(键)之一时,我收到错误消息:TypeError: descriptor 'keys' of 'dict' object needs an argument 。为什么?我该如何解决?

>>> logger.info("request.QueryDict = %s" % request.QueryDict)
[2014-02-25 17:21:30] INFO [myApp.views:2352] request.QueryDict = <class 'django.http.request.QueryDict'>
# Works!


>>> logger.info("dir(request.QueryDict) = %s" % dir(request.QueryDict))
[2014-02-25 17:21:30] INFO [myApp.views:2354] dir(request.QueryDict) = ['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_assert_mutable', '_encoding', '_iteritems', '_iterlists', '_itervalues', '_mutable', 'appendlist', 'clear', 'copy', 'dict', 'encoding', 'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'iterlists', 'itervalues', 'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update', 'urlencode', 'values', 'viewitems', 'viewkeys', 'viewvalues']
# Works!


>>> logger.info("request.QueryDict.keys() = %s" % request.QueryDict.keys())
TypeError: descriptor 'keys' of 'dict' object needs an argument
# Fails!

最佳答案

QueryDict 是一个类,类似于dict 类。

.keys() 是一个实例方法,但是你在类上调用它,所以你需要将实例传递给方法

>>> mydict = {'key': 'value'}
>>> mydict.keys() # instance method, works
['key']
>>> dict.keys() # no argument, on class, same error you get
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'keys' of 'dict' object needs an argument
>>> dict.keys(mydict) # passing in mydict
['key']

编辑:

经过一些研究,看起来 request.GETrequest.POST 都是 request.QueryDict< 的实例/ 。因此,您要调用的不是 request.QueryDict.keys(),而是:

request.GET.keys()

关于python - 为什么我不能得到这个简单的 Python 字典的键/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com