You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

封装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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:52:53