Python MongoDB ReferenceError:弱引用对象不再存在

问题描述 投票:0回答:2

我是我的代码中的错误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
2个回答
0
投票

我认为它与该代码短语无关。它可能是由您的数据库连接器引起的。您可以尝试关闭连接而不关闭光标。

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


0
投票

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

希望这会帮助遇到相同问题的人。

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)
© www.soinside.com 2019 - 2024. All rights reserved.