Python unhashable type: 'dict'

_CH_K_1991_

Lieutenant
Registriert
Nov. 2008
Beiträge
772
Hallo zusammen

Ich habe folgendes Problem mit einem Python Code:

Code:
request = urllib2.urlopen(urllib2.Request(BACKENDPATH + "Data", json.dumps({
       "device": DEVICE,
       "temp": temperature,
       "ACL": {
              USER: {
                    "read": True,
                    "write": True
              }
        }
    }),HEADER))

Die jeweils gross geschriebenen Wörter sind Variabeln.
Auf der Zeile "write": True bekomme ich den Fehler "TypeError: unhashable type: 'dict' ". Ich kenne zwar einige Lösungsvorschläge aus dem Netz nur scheine ich das Problem falsch anzugehen oder sehe den Wald vor lauter Bäumen nicht, da ich noch nicht besonders viele Erfahrungen mit Python gesammelt habe.

Könnte mir bitte jemand hierzu einen Lösungsvorschlag geben?
Was läuft hier falsch?

Danke für Hilfestellungen.
 
Zuletzt bearbeitet:
Folgendes funktioniert bei mir:
Code:
import json
import urllib2

DEVICE = "test_device"
temperature = "666"
USER = "tumbleweed"

data = json.dumps({ "device": DEVICE, "temp": temperature, "ACL": { USER: { "read": True, "write": True } } })
print("Payload: {}".format(data))

if __name__ == "__main__":
  response = urllib2.urlopen(urllib2.response("http://localhost:8080", data, {'Content-Type': 'application/json'}))
  print("Response status code: {}".format(response.getcode()))
  print("Response info: {}".format(response.info()))
Ich würde sagen, du passt mal Schritt für Schritt an die Daten an, die du reinstecken willst. Ansonsten müsstest du mal ein komplettes Beispiel erstellen, d.h. mit Werten, wie sie bei dir gesetzt sind, um den Fehler reproduzieren zu können.
 
Hey Tumbleweed

Danke für deine Antwort.
Du hast mir den entscheidenden Hinweis geliefert. An das habe ich überhaupt nicht gedacht.
Ich beziehe die Daten von einem Parse.com Backend und dort habe ich erst seit kurzem ein Pointer eingebunden und der liefert im Object keinen String zurück sondern ein weiteres Object.

Daher sieht nun die Variablen Definition für das Device so aus: DEVICE = result["device"]["objectId"]
Dann funktioniert auch dein oder mein Code Beispiel.

​Danke :)
 
Zuletzt bearbeitet:
Zurück
Oben