2013-07-16 14 views
6

Yazılımım için bir API yazıyorum, böylece mongodb'e erişim daha kolay. TypeError: Unhashable type: 'dict' atarPymongo API TypeError: Unhashable dict

def update(self, recid):   
    self.collection.find_and_modify(query={"recid":recid}, update={{ "$set": {"creation_date":str(datetime.now()) }}}) 

:

Bu çizgi var.

Bu işlev, yalnızca recid ile eşleşen belgeyi bulmak ve creation_date alanını güncellemek için tasarlanmıştır.

Bu hata neden oluyor?

cevap

10

Çok basit, ekstra/gereksiz küme parantezi eklemiş, şunu deneyin:

self.collection.find_and_modify(query={"recid":recid}, 
           update={"$set": {"creation_date": str(datetime.now())}}) 

UPD'yi (açıklama, sen piton üzerinde olduğunu varsayarak> = 2.7): piton düşündüğü için

hata oluşur bir kümenin elemanları hashable olmalıdır başka bir deyişle

The set classes are implemented using dictionaries. Accordingly, the requirements for set elements are the same as those for dictionary keys; namely, that the element defines both __eq__() and __hash__().

: Eğer {} gösterimi ile bir dizi yapmaya çalışıyoruz mesela int, string. Ve buna bir dict geçiyorsunuz, bu da yıkanabilir değil ve bir kümenin bir öğesi olamaz. yardımcı olur

>>> {{}} 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'dict' 

Hope:

Ayrıca, bu örneğe bakın.

+0

Vay, zeki! Ama neden böyle bir soruna neden oldu? – RockJake28

+1

Cevabı düzelttim, lütfen kontrol edin. – alecxe

+0

Teşekkürler, bu benim için de başka birçok şeyi temizledi! – RockJake28