Python实现DS18B20传感器温度数据写入文本文件故障求助
DS18B20温度写入文件故障排查
已确认的故障点
file.write(id,t)语法错误:Python的文件write方法仅支持传入单个字符串参数,直接传入id和t两个变量会触发参数数量不匹配异常,需先将两个变量格式化为字符串再传入time.sleep(10.0)缩进错误:该行当前缩进层级在while循环之外,代码首次执行完循环后会直接触发语法异常,且被空的except语句捕获吞掉无报错- 文件写入逻辑位置错误:写文件代码放在了
if "YES"判断外,若传感器读取失败未进入判断分支,t变量未定义会直接报错 - 文件打开模式问题:每次循环都用
"w"(覆盖写入)模式打开文件,多个传感器的场景下最终只会保留最后一个传感器的读数 - 路径匹配规则问题:glob匹配路径写为
28-0*,若传感器ID遵循通用规则为28-00xxxx格式,可能出现匹配不到设备的问题 - 空异常捕获问题:
except: pass会吞掉所有报错,无法定位问题根源 - 变量名不规范:使用
id作为变量名,覆盖了Python内置的id()函数,属于不规范的写法,可能引发隐藏问题
修复后代码示例
#!/usr/bin/env python import glob import time from datetime import datetime while True: # 先收集所有传感器读数 temp_records = [] # 匹配规则和参考代码对齐,可根据实际传感器ID调整 for sensor in glob.glob("/sys/bus/w1/devices/28-00*/w1_slave"): sensor_id = sensor.split("/")[5] try: with open(sensor, "r") as f: data = f.read() if "YES" in data: _, _, reading = data.partition(' t=') t = float(reading) / 1000.0 # 格式化要写入的内容,加换行符分隔不同传感器 temp_records.append(f"{sensor_id} {t:.1f}\n") except Exception as e: # 打印错误方便排查,不需要可以注释 print(f"读取传感器{sensor_id}失败:{str(e)}") continue # 所有读数收集完成后一次性写入文件,用w模式每次保存最新读数,要历史记录改成a if temp_records: with open("/var/tmp/temp.txt", "w", encoding="utf-8") as f: f.writelines(temp_records) # 缩进对齐,放在while循环内 time.sleep(10.0)
内容的提问来源于stack exchange,提问作者user16387690
相关产品推荐
相关产品推荐

