我正在尝试使用Python将一些字典解包到某些函数中:
我有一个接受packet
作为参数的函数(应该是字典)
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
我称之为这样:
queue({
'an_item': 1,
'a_key': 'value'
})
发布功能是在第三方API(Google Pub/Sub API)的topic.py中实现的,从我查看的源代码来看:
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
字典参数解包成publish()
可以接受的内容?
谢谢!
编辑:
一些错误消息:
for:
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
我得到了以下错误:
TypeError: 1 的类型为 <class 'int'>,但期望的是其中之一:(<class 'bytes'>, <class 'str'>)
对于:
def queue(self, packet):
self.topic.publish(self.message, self.client, packet)
我收到的错误信息是:publish()需要2到3个定位参数,但是给出了4个
针对:
def queue(self, **packet):
self.topic.publish(self.message, self.client, packet)
我理解到的内容是:
我收到了一个错误信息:TypeError: queue()接受1个位置参数,但实际给定了2个
还有:
def queue(self, *packet):
self.topic.publish(self.message, self.client, packet)
我得到了一个错误信息:
TypeError: publish()需要2到3个位置参数,但给出了4个
编辑2:
正如@gall正确建议的那样,问题在于我发送的数据,而解包没有问题。使用以下函数:
def queue(self, packet):
self.topic.publish(self.message, self.client, **packet)
只使用字符串时,它可以正常工作:
queue({
'an_item': '1',
'a_key': 'value'
})
谢谢大家!
self.topic
是指什么?是Topic
类的一个实例还是仅指类本身? - danideepublish
的文档字符串中,它说:type attrs: dict (string -> string)
, 但是你在示例中似乎有一个值是int。这可能是问题所在吗?除此之外,你调用的方式似乎没问题。 - Gall