封装usb.core.find类时十六进制参数转整数致设备查找失败
问题分析与解决方案
首先明确一个关键误区:Python里的十六进制字面量(比如0x47f)本身就是整数类型,和十进制写法的1151完全等价。usb.core.find接收的idVendor和idProduct参数本身就要求是整数值,所以“十六进制参数被转换为整数导致无法识别”的说法不成立——问题出在你的MyNewClass封装逻辑的参数传递环节,而非数值类型本身。
以下是几种正确的封装实现方式:
方式1:固定参数封装
如果只需要封装指定参数的调用,直接在类方法中接收整数参数并传递即可:
import usb.core class MyNewClass: def get_usb_device(self, id_vendor, id_product): # 直接传递整数值给usb.core.find,不管调用时用十六进制还是十进制传入 return usb.core.find(idVendor=id_vendor, idProduct=id_product) # 调用示例(两种写法效果完全一致) device = MyNewClass().get_usb_device(0x47f, 0x2e6) # 或者 device = MyNewClass().get_usb_device(1151, 742)
方式2:透传所有参数(更灵活)
如果需要复用usb.core.find的所有参数选项,直接用**kwargs透传关键字参数:
import usb.core class MyNewClass: def find_usb_device(self, **kwargs): # 完全透传所有关键字参数给usb.core.find,和原方法调用方式一致 return usb.core.find(**kwargs) # 调用时和原代码写法完全相同 device = MyNewClass().find_usb_device(idVendor=0x47f, idProduct=0x2e6)
排查错误点
如果你之前的封装出现问题,检查是否存在以下错误操作:
- 错误地将整数参数转换为字符串后再传递
- 参数名拼写错误(比如把
idVendor写成idvendor) - 在传递前对参数做了不必要的数值转换(比如错误地修改了参数值)
只要确保传递给usb.core.find的idVendor和idProduct是正确的整数值(不管是十六进制还是十进制字面量传入),就能正常识别设备。
内容的提问来源于stack exchange,提问作者user2678074
相关产品推荐
相关产品推荐

