【问题标题】:RaspberryPi Python TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'RaspberryPi Python TypeError:*:'NoneType'和'float'不支持的操作数类型
【发布时间】:2020-11-10 06:00:36
【问题描述】:

我最近一直在构建一些 Raspberry pi 温度传感器,使用 Pi zeros 来监控某些计算机楼层的温度峰值。 我正在使用初始状态设置并将数据发送到他们的仪表板。 好吧,我得到了一个完美的设置,没有任何问题,并且它可以很好地发送数据。但是当我去设置第二个时,以完全相同的方式,使用完全相同的代码,我不断收到以下错误:

Traceback (most recent call last):
 File "tempsensor.py", line 20, in <module>

 temp_f = format(temp_c * 9.0 / 5.0 + 32.0, ".2f")

 TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

我不精通python,但我尝试查找类似的问题,但没有什么能真正帮助我解决我的问题。 但是我不明白的是这段代码基本上是其他的复制粘贴,以及其他人使用的。 为什么在没有任何变化的情况下会返回错误?

下面还列出了我一直在使用的完整代码。 感谢您的帮助!

import Adafruit_DHT
from ISStreamer.Streamer import Streamer
import time

# --------- User Settings ---------
SENSOR_LOCATION_NAME = "Office"
BUCKET_NAME = ":partly_sunny: Room Temperatures"
BUCKET_KEY = "rt0129"
ACCESS_KEY = "PLACE YOUR INITIAL STATE ACCESS KEY HERE"
MINUTES_BETWEEN_READS = 10
METRIC_UNITS = False
# ---------------------------------

streamer = Streamer(bucket_name=BUCKET_NAME, bucket_key=BUCKET_KEY, access_key=ACCESS_KEY)
while True:
    humidity, temp_c = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
    if METRIC_UNITS:
        streamer.log(SENSOR_LOCATION_NAME + " Temperature(C)", temp_c)
    else:
        temp_f = format(temp_c * 9.0 / 5.0 + 32.0, ".2f")
        streamer.log(SENSOR_LOCATION_NAME + " Temperature(F)", temp_f)
    humidity = format(humidity,".2f")
    streamer.log(SENSOR_LOCATION_NAME + " Humidity(%)", humidity)
    streamer.flush()
    time.sleep(60*MINUTES_BETWEEN_READS)

【问题讨论】:

  • Adafruit_DHT.read_retry 似乎正在返回 None。仔细检查该方法的文档以了解其含义。

标签: python raspberry-pi sensors temperature raspberry-pi-zero


【解决方案1】:

问题是您的temp_c 变量被设置为None。这就是 TypeError: unsupported operand type(s) for *: 'NoneType' and 'float' 异常告诉你的。

我不知道为什么会发生这种情况,但鉴于它发生在您对 Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4) 的调用中,我猜想要么调用不正确。或者,如果相同的代码在另一个 Pi 上运行,则更有可能是传感器未正确安装或设置。

【讨论】:

  • 感谢您的评论!在您说“我猜可能是调用不正确。或者如果相同的代码在另一个 Pi 上运行,则更有可能是传感器未安装或设置正确。”这让我很好地思考,也许传感器工作不正常,让我重新检查了硬件。它最终成为一个死传感器!换掉它,它现在可以工作了。但如果你没有说可能 pi/sensor 不工作,我永远不会检查它。谢谢!
【解决方案2】:

Adafruit_DHT.read_retry 未正确返回 temp_c。因此它是NoneType,不能乘以浮点数。 我建议您尝试通过使用不同的参数和print返回的值调用该函数来进行调试,直到您根据设备的功能弄清楚如何正确调用它。

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2017-06-06
    • 2014-03-28
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多