【问题标题】:Python MongoDB ReferenceError: weakly-referenced object no longer existsPython MongoDB ReferenceError:弱引用对象不再存在
【发布时间】:2020-05-06 12:51:20
【问题描述】:

我的代码中有一个错误ReferenceError: weakly-referenced object no longer exists,我试图调试它,但我不知道为什么会这样。

我正在使用 mongodb 和 python 3.6.10

这是我的代码,请帮忙

a = 't1'
b = ['v1', 'v2', 'v3']
services = dict()

for value in b:
    record = MyModel.objects.filter(myid=id, a=a, value=value).first()
    keys = record['services'].keys()
    for key in keys:
        key_value = record['services'][key]
        if key in services:
            services[key].extend(key_value)     # Getiing error here in this line
        else:
            services.update({key: key_value})
print(services)

MyModel 看起来像

{
    "myid" : "1",
    "a" : "t1",
    "b" : "v1",
    "services" : {
        "service_1" : [ 
            {
                "serviceid" : "1012",
                "service_type" : "service_1"
            }
        ]
}

{
    "myid" : "1",
    "a" : "t1",
    "b" : "v2",
    "services" : {
        "service_2" : [ 
            {
                "serviceid" : "1013",
                "service_type" : "service_2"
            }
        ]
}

如果 b 中只有一个值,代码可以正常工作,但如果代码第二次迭代并尝试执行 services[key].extend(key_value),代码会生成错误。

【问题讨论】:

    标签: django python-3.x mongodb mongoengine


    【解决方案1】:

    我不认为它与这个代码短语有关。它可能是由您的数据库连接器引起的。您可以尝试在不关闭光标的情况下关闭连接。

    当你对弱引用对象使用析构函数__del__ 时,通常会发生这种情况。当你的析构函数在垃圾收集器之前运行时,它会抛出这种异常。你可以阅读更多关于weakref here的信息。

    【讨论】:

      【解决方案2】:

      经过大量尝试和错误后,我发现如果我将值放入空列表中,那么代码可以正常工作,因此我更新了我的代码。我仍然不知道为什么上面的代码给我一个错误,这只是上面代码的替代品。

      希望这对面临同样问题的人有所帮助。

      a = 't1'
      b = ['v1', 'v2', 'v3']
      services = dict()
      
      for value in b:
          record = MyModel.objects.filter(myid=id, a=a, value=value).first()
          keys = record['services'].keys()
          for key in keys:
              key_value = record['services'][key]
              if not key in services:
                  services[key] = list()
              services[key].extend(key_value)
      print(services)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 2023-04-04
        • 2018-08-28
        • 2020-07-19
        • 2010-12-01
        • 2020-12-01
        • 2020-08-22
        相关资源
        最近更新 更多