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

Python使用infi.devicemanager检测设备时Device类型匹配报错求助

问题根因

你的判断完全准确:遍历dm.all_devices得到的device是infi.devicemanager库封装的Device类实例,并非原生字符串类型。
直接print(device)能输出正确设备名,是因为Device类实现了__str__魔法方法,打印操作会自动调用该方法把实例转为字符串输出,但直接把实例对象用于in关键字做字符串包含判断时,Python不会做隐式类型转换,因此抛出TypeError: argument of type 'Device' is not iterable错误。

修复方案

方法1:显式类型转换(最通用)

直接用Python内置的str()方法,把Device实例手动转为字符串后再做匹配即可。
修正后的完整代码:

def searchdongle():
    found = 0
    dm = DeviceManager()
    dm.root.rescan()
    devices = dm.all_devices
    for device in devices:
        # 显式将Device实例转换为字符串
        device_name = str(device)
        print(device_name)
        # 此处保留你原有关键词匹配逻辑,若"Gaurdant"为拼写偏差可自行修正
        if "Gaurdant" in device_name and "Code" in device_name:
           found = 1 
           print("Found it!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
           # 找到目标设备后直接跳出循环,无需遍历剩余设备
           break
                
    return found 

方法2:直接访问设备名称属性

Device类本身提供了直接获取设备友好名称的属性friendly_name,该属性本身就是字符串类型,无需额外转换,可直接用于匹配:

# 替换方法1中的device_name赋值语句即可
device_name = device.friendly_name

注意:部分未配置友好名称的设备,friendly_name可能返回空值,遇到这类情况回退用str(device)获取设备描述字符串做匹配即可。

额外优化点

你原代码中循环外的devicesname = ""初始赋值没有实际作用,可以直接删掉,减少冗余变量。

内容的提问来源于stack exchange,提问作者Marlon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:45:33