Python类方法作为GPIO回调时提示收到2个参数是什么原因?
问题原因
GPIO.add_event_detect绑定的回调函数默认会自动传入触发事件的GPIO引脚编号作为额外参数。你的capture_image实例方法仅定义了self一个位置参数,实际运行时会收到self+引脚编号两个参数,参数数量不匹配触发报错。
查看传入参数的方法
修改capture_image方法的签名,新增参数接收GPIO传入的值,打印即可查看内容:
def capture_image(self, channel): # 新增这行打印传入的参数 print(f"传入的额外参数为:{channel}") global wait wait = False self.date = datetime.datetime.now().strftime('%m-%d-%Y_%H.%M.%S') self.camera.capture('/home/pi/Pictures/' + self.date + '.jpg') print("\r\nImage Captured! \r\n") wait = True
打印出来的参数值就是你绑定事件的23号引脚编号。
解决方案
有两种可选方案:
- 方案1:保留新增的
channel参数即可,即使你业务逻辑不需要用到这个参数,也可以留作占位接收GPIO的自动传参,不需要修改其他调用逻辑。 - 方案2:如果不想修改原方法的定义,可以在绑定回调时用lambda表达式忽略额外参数:
GPIO.add_event_detect(23,GPIO.FALLING,callback = lambda channel: camera.capture_image(), bouncetime = 300)
内容的提问来源于stack exchange,提问作者Hyderman
相关产品推荐
相关产品推荐

