Python MongoDB ReferenceError: объект со слабой ссылкой больше не существует - PullRequest
0 голосов
/ 04 мая 2020

Я ошибаюсь 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), код генерирует ошибку.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

после многих попыток и ошибок я обнаружил, что если я помещаю значения в пустой список, то код работает нормально, поэтому я обновил свой код. Я до сих пор не знаю, почему приведенный выше код дает мне ошибку, это просто альтернатива приведенному выше коду.

Надеюсь, это поможет кому-то столкнуться с той же проблемой.

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)
0 голосов
/ 04 мая 2020

Не думаю, что это связано с этой кодовой фразой. Это может быть вызвано вашим разъемом БД. Вы можете попытаться закрыть соединение, не закрывая курсор.

Обычно это происходит, когда вы используете деструктор __del__ для объекта со слабой ссылкой. Когда ваш деструктор запускается перед сборщиком мусора, он создает исключение такого рода. Вы можете прочитать больше о weakref здесь .

...