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

合并USB检测与读写Python函数时报错:TypeError: 'NoneType'不可下标

问题排查与解决思路

1. 核心问题:设备对象未正确传递/获取

Function1只返回了idVendor和idProduct的字符串列表,但USB文件读写函数(USB_file_write)需要的是实际的USB设备对象,而非这两个ID数值。你大概率是在合并时只传递了ID,没通过ID去查找并获取有效的设备实例。

举个pyusb库的示例流程(如果用的是其他USB库,逻辑类似):

import usb.core

# 把Function1返回的字符串ID转成USB库需要的整数格式(注意是十六进制还是十进制,这里假设返回的是十进制字符串)
vendor_id = int('34148')
product_id = int('4096')

# 通过ID查找设备
dev = usb.core.find(idVendor=vendor_id, idProduct=product_id)

if dev is None:
    raise ValueError("没找到对应USB设备")

重点检查:

  • 是否把字符串ID转换成了USB库要求的整数格式(不同库可能要求十六进制/十进制,别搞混)
  • 调用USB_file_write前,是否确实通过ID拿到了有效的dev对象,而非直接把ID当作设备传进去

2. 排查权限与挂载时机

即使ID正确,也可能因为以下原因拿不到设备对象:

  • 当前用户没有USB设备的读写权限,导致dev返回None:可以临时用sudo运行脚本测试,确认是权限问题后,给对应设备加udev规则永久授权
  • USB刚被检测到,文件系统还没挂载完成:在Function1检测到设备后,加个短暂延迟(比如time.sleep(2)),等挂载完成再去获取设备对象

3. 检查变量作用域

合并函数后可能出现作用域问题:比如dev是Function1里的局部变量,没传递到USB_file_write里,导致后者用的dev是未初始化的None。

解决方式:

  • 让USB_file_write显式接收dev作为参数,调用时把找到的设备对象传进去
  • 别依赖全局变量传设备,显式传参更可靠

4. 强制校验设备实例有效性

在获取dev后立刻做校验,快速定位问题:

dev = usb.core.find(idVendor=vendor_id, idProduct=product_id)
assert dev is not None, f"找不到vendor={vendor_id}, product={product_id}的设备"

如果断言失败,说明设备可能被其他进程占用(比如系统存储服务),或者USB库版本有兼容性问题。


内容的提问来源于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 09:35:15