search.png
关于我
menu.png
ValueError: Circular reference detected

在写django的时候,出现以下错误:

File "C:\Python27\MyDjango\jianzhi_002\jianzhi_app\views.py", line 418, in wx_get_job_detail
    return HttpResponse(json.dumps({'message': message, 'data': detail_data}))
File "C:\Python27\lib\json\__init__.py", line 244, in dumps
    return _default_encoder.encode(obj)
File "C:\Python27\lib\json\encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
File "C:\Python27\lib\json\encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
ValueError: Circular reference detected

提示说的意思存在循环引用

这个错误的意思就是说在把数据打包成json格式的时候,存在循环引用,就比如说:

    a = b = c = {}
    ...
    # 对b c 进行赋值
    b = ...
    c = ...
    ...
    # 将b c 存到 a
    a['b'] = b
    a['c'] = c

在对 a 进行json.dumps(a)的时候就可能会出现以上的错误。

究其原因,是因为 a b c 实际上指向的是同一个对象的引用。python 虽然初始化不用声明类型,还可以在赋值的时候才初始化,但是在使用过程中,有时候还是避免不了要先初始化,再进行赋值的操作,而且不初始化容易导致一些难以察觉的错误,也不利于代码的阅读。pythonic之路漫长长啊。

修改如下:

a, b , c = {}, {}, {}

如此a b c 就不再是同一个的对象了。

问题解决。

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2018年08月17日 18:36:06

评论区#

还没有评论哦,期待您的评论!

关闭特效