pluggy的hooks调用一定要关键字参数

本文讲述了在使用pluggy插件管理库时,必须通过关键字参数调用hook以避免TypeError。强调了关键字参数在提高代码可读性、灵活性和可维护性方面的优势,并给出了示例和解决TypeError的方法。
摘要由CSDN通过智能技术生成

一、问题来源:

self.plugin_manager.hook.sink_data(data=data)

报错如下:
TypeError: HookCaller.call() takes 1 positional argument but 2 were given

二、实验:

在使用 pluggy 这样的插件管理库时,钩子(hooks)通常是通过关键字参数来传递数据的。这样做的好处是:

增强了代码的可读性:调用函数时明确指定参数名,可以让代码更容易理解。
提高了灵活性:如果钩子定义中的参数顺序发生变化,使用关键字参数调用就不会受到影响。
可维护性:当钩子的参数列表在未来可能扩展时,现有的插件调用不需要修改,因为它们已经通过关键字匹配到了正确的参数。
因此,如果你的钩子定义了接受参数的规格,你应该按照钩子的规格使用关键字参数的形式来传递数据。

例如,如果你的钩子定义是这样的

# 假设你有一个钩子规格在某个插件管理器中定义如下
@hookspec
def sink_data(self, data):
    pass

假设你有一些数据要通过这个钩子传递


some_data = {'key': 'value'}
# 正确的调用方式应该是
self.plugin_manager.hook.sink_data(data=some_data)

如果你尝试通过位置参数来调用钩子(即不使用关键字参数),你可能会遇到 TypeError 错误,因为 pluggy 期望通过关键字参数来接收数据。

三、结论

钩子必须用关键字来传参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值