[英]Unpacking a dictionary and passing to a function as keyword parameters
我正在嘗試在python中將一些字典打包成一些函數:
我有一個將packet
作為參數的函數(應該是字典)
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
我這樣稱呼它:
queue({
'an_item': 1,
'a_key': 'value'
})
發布功能在第3方api (Google Pub / Sub API)中以及從我查看的源中得出:
def publish(self, message, client=None, **attrs):
...
message_data = {'data': message, 'attributes': attrs}
message_ids = api.topic_publish(self.full_name, [message_data])
它接受** attrs以便將所有關鍵字參數傳遞給另一個函數。
目前..我的queue()函數無法正常工作。
如果可能的話,如何修復我的queue()
函數以將packet
dict參數解packet
為publish()
會接受的東西?
謝謝!
編輯:
我收到一些錯誤消息。
對於:
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
我得到: TypeError: 1 has type <class 'int'>, but expected one of: (<class 'bytes'>, <class 'str'>)
對於:
def queue(self, packet):
self.topic.publish(self.message, self.client, packet)
我得到: publish() takes from 2 to 3 positional arguments but 4 were given
對於:
def queue(self, **packet):
self.topic.publish(self.message, self.client, packet)
我得到: TypeError: queue() takes 1 positional argument but 2 were given
對於:
def queue(self, *packet):
self.topic.publish(self.message, self.client, packet)
我得到: TypeError: publish() takes from 2 to 3 positional arguments but 4 were given
編輯2:
正如@gall正確建議的那樣,它是我正在發送的數據,並且解壓縮沒有問題。 具有此功能:
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
當我僅使用字符串調用它時,它可以工作:
queue({
'an_item': '1',
'a_key': 'value'
})
謝謝你們!
根據publish的文檔字符串, attr
必須是string -> string
字典。
您可以通過替換來解決此問題
queue({
'an_item': 1,
'a_key': 'value'
})
具有純字符串參數,例如
queue({
'an_item': '1',
'a_key': 'value'
})
看來您的問題與字典解包無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.