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

Python提取USB设备中Mass Storage Device信息的报错解决求助

提取USB设备中的Mass Storage Device条目解决方案

问题背景

需要遍历系统中所有USB设备,筛选出产品名称为"Mass Storage Device"的设备条目,并按指定格式输出。之前的代码因错误使用内置类型str导致TypeError,且未完成筛选逻辑。

报错原因分析

代码中if "Mass Storage Device" in str:这一行错误地将Python内置的字符串类型str当作变量使用,而str是不可迭代的类型,因此抛出argument of type 'type' is not iterable错误。同时,循环外引用循环内的dev、xdev变量会导致仅获取最后一个设备的信息,不符合需求。

修正后的完整代码

import usb.core
import usb.backend.libusb1

def list_USB_all_info():
    # 打印表头
    print('idVendor  idProduct  Manufacturer - Product')
    
    busses = usb.busses()
    # 用于存储符合条件的设备条目
    mass_storage_devices = []
    
    for bus in busses:
        for dev in bus.devices:
            if dev:
                xdev = usb.core.find(idVendor=dev.idVendor, idProduct=dev.idProduct)
                # 获取制造商和产品名称,处理空值
                manufacturer = usb.util.get_string(xdev, xdev.iManufacturer) if xdev._manufacturer is None else xdev._manufacturer
                product = usb.util.get_string(xdev, xdev.iProduct) if xdev._product is None else xdev._product
                
                # 格式化设备信息字符串
                device_line = '%8d  %9d  %s - %s' % (
                    dev.idVendor, 
                    dev.idProduct,
                    str(manufacturer).strip(),
                    str(product).strip()
                )
                # 打印所有设备信息
                print(device_line)
                
                # 检查是否为目标设备,符合则加入列表
                if "Mass Storage Device" in device_line:
                    mass_storage_devices.append(device_line)
    
    # 输出分隔线和筛选结果
    print("\n" + "="*20)
    if mass_storage_devices:
        for device in mass_storage_devices:
            print(f"(Mass Storage Device is  :  {device})")
    else:
        print("No Mass Storage Device found.")
    
    return mass_storage_devices

# 执行函数
result = list_USB_all_info()

关键改进点

  1. 实时筛选:在遍历每个设备时直接检查设备信息字符串,无需先存储所有内容再二次处理,提升效率。
  2. 变量作用域修复:使用列表mass_storage_devices收集所有符合条件的设备,避免循环外引用循环内变量导致的错误。
  3. 空值处理优化:简化制造商和产品名称的空值判断逻辑,代码更简洁。
  4. 友好提示:当没有找到目标设备时,输出明确提示信息。

预期输出示例

idVendor  idProduct  Manufacturer - Product
    1133      49271  Logitech - USB Optical Mouse
    1423      37728   - USB Reader
   34148       4096  JetFlash - Mass Storage Device
    7531          2  Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
    7531          3  Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
    5117       2112  Generic - External
    7531          2  Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
    7531          3  Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller

====================
(Mass Storage Device is  :    34148       4096  JetFlash - Mass Storage Device)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:32