【问题标题】:'str' object has no attribute '__dict__'“str”对象没有属性“__dict__”
【发布时间】:2011-11-21 19:42:45
【问题描述】:

我想在 Python 中将字典序列化为 JSON。我有这个 'str' 对象没有属性 'dict' 错误。这是我的代码...

from django.utils import simplejson

class Person(object):
    a = ""

person1 = Person()
person1.a = "111"

person2 = Person()
person2.a = "222"

list = {}
list["first"] = person1
list["second"] = person2

s = simplejson.dumps([p.__dict__ for p in list])

例外是;

Traceback (most recent call last):
  File "/base/data/home/apps/py-ide-online/2.352580383594527534/shell.py", line 380, in post
    exec(compiled_code, globals())
  File "<string>", line 17, in <module>
AttributeError: 'str' object has no attribute '__dict__'

【问题讨论】:

  • 避免使用列表作为变量名。通过list = {},您已经覆盖了内置的list() 构造函数。

标签: python json serialization dictionary


【解决方案1】:

怎么样

s = simplejson.dumps([p.__dict__ for p in list.itervalues()])

【讨论】:

    【解决方案2】:

    你认为[p.__dict__ for p in list] 会做什么?

    由于list 不是列表,而是字典,for p in list 会遍历字典的键值。键是字符串。

    切勿将listdict 之类的名称用于变量。

    永远不要对数据类型撒谎。您的 list 变量是字典。称它为“person_dict`,你会更快乐。

    【讨论】:

      【解决方案3】:

      您使用的是字典,而不是列表作为 list,为了让您的代码正常工作,您应该将其更改为列表,例如

      list = []
      list.append(person1)
      list.append(person2)
      

      【讨论】:

        猜你喜欢
        • 2019-12-02
        • 2017-12-20
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 2016-09-20
        • 2019-03-25
        相关资源
        最近更新 更多