如何解决glob.glob调用引发的IndexError: list index out of range错误?
解决
IndexError: list index out of range(DS18B20传感器路径匹配问题) 嘿,这个错误我太熟了——本质就是你的代码里glob.glob(base_dir+'28*')没有找到任何匹配的设备文件夹,你直接用[0]去取空列表的第一个元素,自然就触发了索引越界错误。这种情况大多和DS18B20温度传感器的驱动、硬件连接或者树莓派配置有关,下面给你一步步排查和解决的方案:
先搞懂错误根源
Traceback (most recent call last): File "/home/pi/codes/myprog.pyc", line 11, in
device_folder = glob.glob(base_dir+'28*')[0] IndexError: list index out of range
这段报错明确告诉你:glob.glob(base_dir+'28*')返回了一个空列表,没有找到任何以28开头的文件夹(DS18B20传感器的设备目录默认在/sys/bus/w1/devices/下,命名都是28开头)。
一步步解决问题
1. 检查1-Wire驱动是否加载
先手动加载驱动试试,在终端执行这两个命令:
sudo modprobe w1-gpio sudo modprobe w1-therm
然后查看传感器目录:
ls /sys/bus/w1/devices/
如果输出里有28-xxxxxxxxx格式的文件夹,说明驱动没问题,那问题可能在硬件或者代码;如果没有,继续往下排查。
2. 确认树莓派的1-Wire接口已启用
很多时候默认是关闭的,需要手动开启:
- 终端输入
sudo raspi-config - 选择
Interface Options->1-Wire - 选择启用(Enable),然后重启树莓派
重启后再重复第一步的驱动加载和目录查看操作。
3. 排查硬件连接问题
DS18B20的连接有几个关键点,错一个都不行:
- VCC引脚接树莓派的3.3V(别接5V,容易烧传感器)
- GND引脚接树莓派的GND
- DATA引脚接树莓派的GPIO4(物理引脚7),必须串联一个4.7kΩ的上拉电阻到3.3V(这是最容易忽略的点,没有上拉电阻传感器根本无法通信)
检查完连接后,重新上电再看设备目录是否出现。
4. 修改代码避免硬取索引
就算前面的问题都解决了,也可能偶尔出现传感器断开的情况,所以代码里要做容错处理,不要直接用[0]:
import glob base_dir = '/sys/bus/w1/devices/' # 先获取所有匹配的设备文件夹 device_folders = glob.glob(base_dir + '28*') if not device_folders: print("错误:未找到DS18B20设备,请检查驱动和硬件连接!") # 可以在这里添加重试逻辑或者退出程序 exit(1) else: # 取第一个设备文件夹 device_folder = device_folders[0] # 继续后续的温度读取逻辑
这样代码就不会直接崩溃,还能给出明确的提示信息。
内容的提问来源于stack exchange,提问作者waseem sajjad
相关产品推荐
相关产品推荐

