str'对象没有'__dict__'属性

10 投票
3 回答
22172 浏览
提问于 2025-04-17 02:45

我想把一个字典转换成JSON格式,在Python中遇到了一个错误,提示说这个'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__'

3 个回答

3

你现在用的是字典,而不是列表。如果你想让你的代码正常工作,应该把它改成列表,比如这样:

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

你觉得 [p.__dict__ for p in list] 这个代码在干嘛呢?

因为 list 其实不是一个列表,它是一个字典,所以 for p in list 这个部分是在遍历字典里的键值对。字典的键是字符串。

千万不要用像 listdict 这样的名字来命名变量。

而且也不要对数据类型撒谎。你的 list 变量其实是个字典,叫它 "person_dict" 会让你更开心。

7

这样怎么样

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

撰写回答