AttributeError:“NoneType”对象在循环时没有属性“get”

2024-05-07 13:00:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这是由于试图访问未在上定义的属性而导致的属性错误

所以基本上我是在解析一个API返回的JSON响应。在

反应是这样的。在

{
    "someProperty": {
         "value": 123
     }
},
{
    "someProperty":null
},

我正在循环x = response.json()对象并尝试作为

^{pr2}$

它可以手动使用解释器进行测试

In[2]: x = {1:2, 2:34}
In[3]: x.get('someProperty', {}).pop('value', 0)
Out[3]: 0

但是当在类函数中访问相同的函数时,它会引发属性错误。我做错什么了?在

只有当someProperty的值为空时,才以编程方式调用方法时才会引发错误。

更新

这是我在课堂上使用的方法。在

class SomeClass(object):

    def __init__(self, **kwargs):
        self.value = kwargs.get('someProperty', {}).pop('value', 0)

    def save():
        pass

现在的用法

x = response.json()
for num, i in enumerate(x):
    j = SomeClass(**i)
    j.save()

Tags: 方法函数inselfjsonget属性value
1条回答
网友
1楼 · 发布于 2024-05-07 13:00:09

您忘记了someProperty存在,但设置为None的情况。您在输入JSON中包含了该案例:

{
    "someProperty":null
}

这里的键存在于,其值被设置为None(JSON中null的Python等价物)。然后,dict.get()返回该值,None没有.pop()方法。在

演示:

^{pr2}$

dict.get()仅当密钥不存在时返回默认值。在上面的示例中,"someProperty"存在,因此返回它的值。在

我会用一本空字典替换任何错误的值:

# value could be None, or key could be missing; replace both with {}
property = kwargs.get('someProperty') or {}  
self.value = property.pop('value', 0)

相关问题 更多 >