我正在使用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)
答案 0 :(得分:5)
publish()至少需要3个参数(给定3个)
这么糟糕的错误信息!令人困惑的一点是self
也被视为参数,即使它没有明确提供。
所以你需要提供2个参数。你做到了!但是您需要提供2 必需的参数,而您只提供了1个必需参数和1个可选参数。查看pubnub.publish()
的API文档,了解您缺少的内容。
答案 1 :(得分:1)
虽然丹尼尔提供了一个很好的解释,但我想要一个极简主义的例子,并且能够想出这个:
>>> 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)
因此提供了两个参数(self
和arg2
),但它表示至少需要2个位置参数(self
和{{1} })。因此,arg1
可以正常工作,Foo(arg1=1)
和Foo(1, 2)
也是如此。