【问题标题】:publish() takes at least 3 arguments (3 given)publish() 至少需要 3 个参数(给定 3 个)
【发布时间】:2023-03-23 14:18:02
【问题描述】:

我正在使用 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)

【问题讨论】:

  • 显然你只给了publish two 参数,channel and callback。它还需要一个功能
  • @ThePredator:不,self 是隐含的,也可以计算在内。但是,该函数需要 2 个 positional 参数,而这些参数都丢失了。
  • @DanielDarabos:位置参数是什么意思?
  • f(1, 2) -- 这些是位置参数。 f(x=1, y=2) -- 这些是关键字参数。另请参阅 Python 文档。

标签: python function ceilometer


【解决方案1】:

publish() 至少需要 3 个参数(给定 3 个)

如此可怕的错误信息!令人困惑的一点是,self 也算作一个参数,即使它没有明确提供。

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

【讨论】:

  • 感谢您的回答。这使事情变得清晰,但在 pubnub 的 API 文档中,该函数是用 2 个 kayword 参数构造的。 pubnub.com/docs/python/data-streams-publish-and-subscribe
  • 您也可以通过关键字提供位置参数,但您必须以某种方式提供它们。您没有提供第二个位置参数,即message
【解决方案2】:

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

>>> 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) 也会起作用。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2018-07-17
    • 2013-08-03
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多