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 就不再是同一个的对象了。

问题解决。

猜你喜欢

转载自blog.csdn.net/le_17_4_6/article/details/81781956
今日推荐