4

ich in Python versuchen einige dict in eine Funktion zu entpacken:ein Wörterbuch auspacken und auf eine Funktion als Keyword-Übergabe von Parametern

Ich habe eine Funktion, die packet als Parameter erhält

def queue(self, packet): 
    self.topic.publish(self.message, self.client, **packet) 
(das dict sein sollte)

und ich nenne es so aus:

queue({ 
     'an_item': 1, 
     'a_key': 'value' 
    }) 

die Publish-Funktion ist in 3rd party api (Google Pub/Sub-API) und von dem, was ich an der Quelle sah:

es akzeptiert ** attrs, um alle Schlüsselwortparameter in eine andere Funktion zu übergeben.

Momentan .. meine queue() Funktion funktioniert nicht.

Wie, wenn möglich, kann ich meine queue() Funktion zu entpacken das packet dict Argument in etwas publish() wird akzeptieren?

Danke!


EDIT:

Einige Fehlermeldungen ich habe.

für:

def queue(self, packet): 
    self.topic.publish(self.message, self.client, **packet) 

ich: TypeError: 1 has type <class 'int'>, but expected one of: (<class 'bytes'>, <class 'str'>)


für:

def queue(self, packet): 
    self.topic.publish(self.message, self.client, packet) 

ich: publish() takes from 2 to 3 positional arguments but 4 were given


für:

def queue(self, **packet): 
    self.topic.publish(self.message, self.client, packet) 

ich: TypeError: queue() takes 1 positional argument but 2 were given


und für:

def queue(self, *packet): 
    self.topic.publish(self.message, self.client, packet) 

ich: TypeError: publish() takes from 2 to 3 positional arguments but 4 were given


EDIT 2:

als @gall richtig vorgeschlagen, es ist die Daten, die ich sendete und es gibt kein Problem mit dem Auspacken.Mit dieser Funktion:

def queue(self, packet): 
    self.topic.publish(self.message, self.client, **packet) 

Es funktioniert, wenn ich es mit Streichern rufen nur:

queue({ 
     'an_item': '1', 
     'a_key': 'value' 
    }) 

Vielen Dank!

+1

Wie funktioniert Ihre Funktion nicht, können Sie eine Fehlermeldung ausgeben? –

+1

Ja @ JonasAdler. Vielen Dank. Ich werde ein Beispiel für Fehlermeldungen hinzufügen, was ich bisher versucht habe. –

+1

Worauf bezieht sich "self.topic"? eine Instanz der 'Topic' Klasse oder nur die Klasse selbst? – danidee

Antwort

1

Entsprechend dem Docstring von publish, attr muss ein string -> string dict sein.

Sie können das Problem beheben, indem

queue({ 
    'an_item': 1, 
    'a_key': 'value' 
}) 

mit rein String-Argumente ersetzt, z.B.

queue({ 
    'an_item': '1', 
    'a_key': 'value' 
}) 

Es scheint, dass Ihr Problem nichts mit Wörterbuchentpacken zu tun hat.

Verwandte Themen