python - TypeError:不支持的格式字符串传递给 NoneType.__format__ 用于 python 中的树莓项目
问题描述
hello,
I have a DHT22 that turn on/off some GPIOs depending of my temperature.
The problem is that when i reach 25 degrees, my script crashes and I receive this error:
TypeError: unsupported format string passed to NoneType.__format__
关于这一行:打印(“温度={0:0.1f}*C湿度={1:0.1f}%”.format(温度,湿度));
谁能帮我解决这个问题?我无法修复它。我已经尝试了这么久...非常感谢
import RPi.GPIO as GPIO
import time
import Adafruit_DHT
DHT_sensor = Adafruit_DHT.DHT22
DHT_PIN = 4
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
while True:
time.sleep(3),
humidity, temperature = Adafruit_DHT.read_retry(DHT_sensor, DHT_PIN)
print ("Temp={0:0.1f}*C humidity={1:0.1f}%".format(temperature, humidity));
if temperature > 25:
print ("vanne ouverte")
print ("boiler en fonctionnement")
print ("ventilateur désactivé")
print ("circulateur en fonctionnement")
GPIO.output(18,GPIO.HIGH)
GPIO.output(21,GPIO.HIGH)
GPIO.output(23,GPIO.HIGH)
else:
print ("vanne fermée")
print ("boiler à l'arrêt")
print ("ventilateur activé")
print ("circulateur à l'arrêt")
GPIO.output(18,GPIO.LOW)
GPIO.output(21,GPIO.LOW)
GPIO.output(23,GPIO.LOW)
GPIO.cleanup()
解决方案
底层库并非一直都能成功读取。当它放弃时,它只返回 None。不过,这不是一个真正的问题,您每 3 秒阅读一次,另一个机会就在拐角处。
您应该只在它们有效后处理这些值。你可以这样做:
while True:
time.sleep(3),
humidity, temperature = Adafruit_DHT.read_retry(DHT_sensor, DHT_PIN)
if temperature is not None and humidity is not None:
print("Temp={0:0.1f}*C humidity={1:0.1f}%".format(temperature, humidity));
if temperature > 25:
print ("vanne ouverte")
print ("boiler en fonctionnement")
print ("ventilateur désactivé")
print ("circulateur en fonctionnement")
GPIO.output(18,GPIO.HIGH)
GPIO.output(21,GPIO.HIGH)
GPIO.output(23,GPIO.HIGH)
else:
print ("vanne fermée")
print ("boiler à l'arrêt")
print ("ventilateur activé")
print ("circulateur à l'arrêt")
GPIO.output(18,GPIO.LOW)
GPIO.output(21,GPIO.LOW)
GPIO.output(23,GPIO.LOW)
然后你可以添加更多的错误处理,比如连续计算错误,如果它变得太大,做一些更激烈的事情。
如果您曾经在过程中使用湿度进行测试,您也应该这样做。我有一个读取湿度和温度的传感器,湿度读数总是失败(30% 的时间),但读数仍然每分钟多次出现。
推荐阅读
- api - 如何从 iOS 中的 Dynamics CRM 获取联系人 API?
- android - play-services-ads:18.0.0 和 appcompat-v7:28.0.0 - 合并失败,使用 groupid com.android.support 和 androidx.* 的依赖项无法合并
- javascript - 角度:7 如何在父组件上测试子发射器?
- webdriver-io - Firefox 的 Webdriver IO 自动化测试用例失败
- python - 如何从第一个类中声明的另一个类访问类的对象?
- typescript - 打字稿类型检查类型
- powershell - 来自文本文件的数据
- hibernate - 如何修复jpa和oracle-sql-developer之间自增主键的映射
- javascript - 从行回调函数数据表调用函数
- python-3.x - 列表和函数