@Drezael: Du musst den Rückgabewert testen und nicht bedingungslos auf die beiden Namen `t` und `h` entpacken. Denn wie man sieht funktioniert das entpacken von `None` auf zwei Namen nicht. Was sollte da auch passieren‽
Sonstige Anmerkungen: Einrückungstiefe ist per Konvention vier Leerzeichen pro Ebene. Siehe auch den
Style Guide for Python Code.
`type` ist der Name einer eingebauten Funktion, den sollte man nicht an etwas anderes binden. Der Wert könnte sowieso etwas präziser benannt werden.
Zum starten von externen Programmen sollte das `subprocess`-Modul verwendet werden, welches eingeführt wurde um diverse andere Arten zu ersetzen, inklusive `os.system()`. Wobei der Aufruf von ``clear`` nicht schön ist. Das löscht dem Benutzer den Inhalt vom Terminal, was eventuell nicht erwünscht ist.
Soll der Sensor tatsächlich vor jedem Auslesen aufs Neue initialisiert werden? Ich denke mal das gehört vor die Schleife.
Abkürzungen sollte man bei Namen vermeiden, solange sie nicht allgemein bekannt sind. `t` und `h` sind zu nichtssagend. Bei `t` kann man aus dem Programmkontext noch erkennen wie der Wert eigentlich benannt sein sollte, während man bei `h` nur raten kann, sofern man nicht den Sensor und die API von dem `dhtreader`-Modul kennt.
Die Klammern bei der Ausgabe wenn kein Wert ermittelt werden konnte, gehören dort nicht hin.
Beide ``continue``-Anweisungen sind überflüssig, weil der Programmfluss dort sowieso schon am Ende der Schleife angekommen ist, also auch ohne das jeweilige ``continue`` als nächster Schritt die Schleife von vorne beginnt.
In beiden Bedingungszweigen wird am Ende drei Sekunden geschlafen. Der Funktionsaufruf kann also *einmal* nach der Schleife stehen.
Was da mit `t` gemacht wird, ist ziemlicher Unsinn. Das ist ein ganzzahliger Wert, den erst in eine Zeichenkette und die dann in eine Gleitkommazahl zu wandeln macht keinen Sinn. Einen Wert ohne Nachkommastellen auf eine Stelle nach dem Komma zu runden ist ebenfalls sinnfrei. Und `temparatur` ist falsch geschrieben.
Ich komme dann bei so etwas heraus (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python
from subprocess import call
from time import sleep
import dhtreader
def main():
dht_sensor_type = 22
dht_sensor_pin = 4
dhtreader.init()
while True:
call('clear')
sensor_values = dhtreader.read(dht_sensor_type, dht_sensor_pin)
if sensor_values:
temperature, _humidity = sensor_values
print temperature
else:
print 'Es konnte kein Wert ermittelt werden.'
sleep(3)
if __name__ == '__main__':
main()