publish()至少接受3个参数(给定3个)

2024-04-18 23:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用ceilometer python API并将数据发布到pubnub。不知道这个错误是什么意思。

我认为这是导致问题的代码部分

def init_Data(data, channel):
  cpu_sample = cclient.samples.list(meter_name ='cpu_util')
  for each in cpu_sample:
    timetamp = each.timestamp
    volume =  each.counter_volume
    volume_int = int(volume)
    data_volume ={'value': volume_int}
    data=json.dumps(data_volume)
    print (data)


pubnub.publish(channel='orbit_channel', callback= init_Datar)

Tags: 数据sample代码apidatainitdef错误
2条回答

publish() takes at least 3 arguments (3 given)

如此可怕的错误信息!混淆的一点是,self也算作参数,即使它没有显式地提供。

所以你需要提供两个参数。你做到了!但是您需要提供2必需的参数,而您只提供了1个必需的和1可选的参数。检查API文档中的pubnub.publish()以查看缺少的内容。

虽然丹尼尔给出了一个很好的解释,但我想要一个极简主义的例子,并且能够得出这样的结论:

>>> class Foo(object):
...     def __init__(self, arg1, arg2=None):
...         pass
... 
>>> Foo(arg2=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes at least 2 arguments (2 given)

所以提供了两个参数(selfarg2),但这意味着至少需要2个位置参数(selfarg1)。所以Foo(arg1=1)可以工作,就像Foo(1, 2)Foo(1, arg2=2)一样。

相关问题 更多 >