Seite 1 von 1

Type Error bei DHT11 Programm

Verfasst: Donnerstag 29. September 2022, 06:24
von Susie
Guten Morgen zusammen,

ich bin ganz frisch hier und auch frisch in Python, lerne gerade wo ich nur kann. Prompt habe ich das erste Problem mit meinem Code bzw. mit dem None was bei raus kommt.
Benutze einen DHT11 für die Temperatur und die Luftfeuchtigkeit, schreibe dies in ein Log und mit Telegraf dann in eine influxDB, mit Grafana hole ich mir die Daten und gebe sie grafisch aus. Dies funktioniert auch ohne Probleme, nur wenn dann ein "None" von meinem DHT11 kommt bricht das Programm ab.

Hier mein Code:

Code: Alles auswählen

import Adafruit_DHT as adht
import time
import logging

logging.basicConfig(filename='/home/pi/scripts/temperature.log', level=logging.INFO, filemode='a', format='%(created)f %(message)s')

while True:
	try:
		h, t = adht.read_retry(adht.DHT11, 4)
		logging.info('Temp={0:0.1f} C and Humidity={1:0.1f} %'.format(t, h))
	except ValueError:
		print("RuntimeError, trying again...")
		continue
Und die Fehlermeldung

Code: Alles auswählen

TypeError: unsupported format string passed to NoneType.__format__
Nun ist die Frage wie kann ich verhindern das er dann aus dem Programm aussteigt?
Habs, wie ihr sehen könnt, mit dem except ValueError versucht ohne Erfolg.

Wäre super wenn mir jemand auf die Sprünge helfen könnte.

Liebe Grüße
Susie

Re: Type Error bei DHT11 Programm

Verfasst: Donnerstag 29. September 2022, 06:52
von __deets__
Na du bekommst ja auch einen TypeError. Den musst du fangen. Du kannst auch mehrere Ausnahmen in einem Tuple abgeben, falls irgendwo ein ValueError auch auftaucht.

Das continue am Ende ist überflüssig.

Re: Type Error bei DHT11 Programm

Verfasst: Donnerstag 29. September 2022, 06:56
von Sirius3
Wenn ein TypeError geworfen wird, dann wird der nicht durch einen ValueError abgefangen.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Variablennamen sollten aussagekräftig sein, also humidity und temperature statt h,t, oder temp.
`continue` sollte man sparsam benutzen, hier ist es völlig unnötig, weil die Schleife eh sofort wieder von vorne beginnt.

Code: Alles auswählen

import time
import logging
import Adafruit_DHT as adht

logger = logging.getLogger(__name__)

LOGFILENAME = '/home/pi/scripts/temperature.log'

def main():
    logging.basicConfig(filename=LOGFILENAME, level=logging.INFO, filemode='a', format='%(created)f %(message)s')

    while True:
        try:
            humidity, temperature = adht.read_retry(adht.DHT11, 4)
            logger.info('Temperature=%0.1f C and Humidity=%0.1f %%', temperature, humidity)
        except TypeError:
            print("RuntimeError, trying again...")

if __name__ == "__main__":
    main()

Re: Type Error bei DHT11 Programm

Verfasst: Donnerstag 29. September 2022, 07:16
von Susie
Sirius3 hat geschrieben: Donnerstag 29. September 2022, 06:56 Wenn ein TypeError geworfen wird, dann wird der nicht durch einen ValueError abgefangen.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Variablennamen sollten aussagekräftig sein, also humidity und temperature statt h,t, oder temp.
`continue` sollte man sparsam benutzen, hier ist es völlig unnötig, weil die Schleife eh sofort wieder von vorne beginnt.

Hallo Sirius3,

vielen Dank für Deine Antwort, das mit den 4 Leerzeichen wusste ich nicht, mein vscode macht das mit den Tabs immer ganz gut, deswegen dachte ich ist dies ok.

Ich habe deinen Code jetzt mal übernommen, vielen Dank dafür. Das mit dem TypeError und ValueError hätte mir auch auffallen können. Manchmal bin ich blind auf beiden Augen :geek: :D

Muss noch viel lernen...

Viele Grüße
Susie