Zitat von wvhn
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Problem mit Logik Syntax
Einklappen
X
-
Hallo Haxley,
schau Dir doch bitte mal diesen Beitrag zum Thema "Einrücken" an:
GrußHTML-Code:https://knx-user-forum.de/forum/supportforen/smarthome-py/1497890-hilfe-zu-smarthomeng-erhalten-python-code-und-yaml-konfig-richtig-einf%C3%BCgen#post1497890
Hans
Einen Kommentar schreiben:
-
Man kann offenbar nicht oft genug darauf hinweisen:
wenn man auf das A rechts oben im Post clickt, um die Editorfunktionen sichtbar zu machen, dann gibt es ganz links die Taste "<>". Ein Click darauf befördert den Editor in einen Modus, in dem er Einrückungen bestens akzeptiert - auch von Notepad ++, der IMHO ein genial guter Editor ist.
Gruß
Wolfram
Einen Kommentar schreiben:
-
Das liegt dann aber am notepad++ und nicht am Forum.
Gruß, Waldemar
P.S.: Noch ein Tipp: Verwende eine Entwicklungsumgebung, wie z.B. Visual Studio Code, die bewahrt Dich vor solchen Fehlern, da dort die Dokumententypen für die jeweiligen Formate bekannt sind oder als Plugin nachinstalliert werden können.
Einen Kommentar schreiben:
-
Das ist nicht korrekt. Einfügen aus Notepad++ wird bei mir im Forum auch bei CODE alles linksbündig gemacht.Zitat von mumpf Beitrag anzeigenHi,
kann man so nicht sagen. CODE übernimmt natürlich die Einrückung, zumindest solange es Leerzeichen sind.
Einen Kommentar schreiben:
-
Hi,
schön, dass Du es hinbekommen hast.
Aber:
kann man so nicht sagen. CODE übernimmt natürlich die Einrückung, zumindest solange es Leerzeichen sind.Zitat von Haxley Beitrag anzeigenDazu kommt noch, dass hier im Forum die ganze Einrückgeschichte nicht per Einfügen übernommen wird (weder bei PHP, Code oder HTML)
YAML ist einfach eine standardisiertes Datenformat, wie JSON oder HTML, für die es fertige Parser gibt. Und hat mit der Python-Formatierung rein gar nichts zu tun...
Gruß, Waldemar
Einen Kommentar schreiben:
-
Ich habs hinbekommen. YAML interpretiert ja das einrücken.
Die/der Entwickler hat sich sicher was dabei gedacht smarthome damals auf YAML umzustellen aber ich kann es nicht nachvollziehen. Gerade Nutzer die nicht regelmäßig mit YAML arbeiten haben damit extreme Probleme. (Einrücken, Tab usw.)
Dazu kommt noch, dass hier im Forum die ganze Einrückgeschichte nicht per Einfügen übernommen wird (weder bei PHP, Code oder HTML).
Naja aber ihr habt mir den Weg gezeigt. Dankeschön!
Einen Kommentar schreiben:
-
Hi,
Du kannst Dir bei Python nicht aussuchen, wie weit Du einrückst, da die Einrückungen über die Blockgröße (also was alles zu einem if oder einem else gehört) entscheiden. Du solltest Dich für eine Einrückweite entscheiden und das konsequent durchziehen, dann verschwinden auch die Fehler.
Ich habe bei Dir in den ersten Zeilen schon 2, 3, 4 und 5 Leerzeichen als Einrückung gesehen, das kann nicht klappen. Mach immer 4 hin (als Vorschlag).
Ein else ganz nach vorne zu ziehen verändert die Semantik und kann nicht klappen - es gehört unter das zugehörige if. Alle Zeilen zwischen if und else gehören 4 Zeichen eingerückt etc.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Das zweite "else" muss doch auch ein Stück nach links unter sein "if", oder?
Einen Kommentar schreiben:
-
Ist Deine Leerzeile vor dem "else" auch mit Leerzeichen eingerückt? Sonst endet der eingerückte Block wahrscheinlich dort und das "else" kann nicht korrekt zugeordnet werden.Zitat von Haxley Beitrag anzeigenFile "/usr/smarthome/logics/pool_heizung.py", line 7
else:
^
IndentationError: unexpected indent[/HTML]
Nehme ich die Leerzeichen in Zeile 7 vor dem else weg dann ist es ok und es verlagert sich auf das zweite else Zeile 13
Einen Kommentar schreiben:
-
Problem mit Logik Syntax
Hallo
ich hab ein Problem mit der Syntax im einer Logik.
Wenn ich das so schreibe:
Bekomme ich ein:Code:# Automatik zur Steuerung der Filterpumpe um den Pool zu heizen if sh.Solarheizung.Automatik(): if sh.pool.temp_poolwasser() >= sh.Solarheizung.TempMax(): if sh.Solarheizung.Pumpe() == 1: sh.Solarheizung.Pumpe(0) logger.warning("Solarheizung Pool - Aus, Maximaltemperatur erreicht") else: if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempEin()) > sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe() == 0: if sh.Solarheizung.TempMax() > sh.pool.temp_poolwasser(): sh.Solarheizung.Pumpe(1) logger.info("Solarheizung Pool - Ein") else: #logger.info("TempAbschalt {0}".format(sh.Messdaten.Alle.Temperatur8() + sh.Pool.Solarheizung.TempAus())) if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempAus()) <= sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe(): sh.Solarheizung.Pumpe(0) logger.info("Solarheizung Pool - Aus")
Nehme ich die Leerzeichen in Zeile 7 vor dem else weg dann ist es ok und es verlagert sich auf das zweite else Zeile 13HTML-Code:Traceback (most recent call last): File "/usr/smarthome/lib/logic.py", line 998, in _generate_bytecode self.bytecode = compile(code, self.pathname, 'exec') File "/usr/smarthome/logics/pool_heizung.py", line 7 else: ^ IndentationError: unexpected indent
Es sind keine Tabs drin nur Leerzeichen. Alles mit Notepad ++ gemacht. Ich verstehe das nicht. Warum ist das so?Code:# Automatik zur Steuerung der Filterpumpe um den Pool zu heizen if sh.Solarheizung.Automatik(): if sh.pool.temp_poolwasser() >= sh.Solarheizung.TempMax(): if sh.Solarheizung.Pumpe() == 1: sh.Solarheizung.Pumpe(0) logger.warning("Solarheizung Pool - Aus, Maximaltemperatur erreicht") else: if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempEin()) > sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe() == 0: if sh.Solarheizung.TempMax() > sh.pool.temp_poolwasser(): sh.Solarheizung.Pumpe(1) logger.info("Solarheizung Pool - Ein") else: #logger.info("TempAbschalt {0}".format(sh.Messdaten.Alle.Temperatur8() + sh.Pool.Solarheizung.TempAus())) if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempAus()) <= sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe(): sh.Solarheizung.Pumpe(0) logger.info("Solarheizung Pool - Aus")
Setze ich Zeile 13 das Zweite else an den Anfang der Zeile:
Dann bringt das nichts.Code:# Automatik zur Steuerung der Filterpumpe um den Pool zu heizen if sh.Solarheizung.Automatik(): if sh.pool.temp_poolwasser() >= sh.Solarheizung.TempMax(): if sh.Solarheizung.Pumpe() == 1: sh.Solarheizung.Pumpe(0) logger.warning("Solarheizung Pool - Aus, Maximaltemperatur erreicht") else: if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempEin()) > sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe() == 0: if sh.Solarheizung.TempMax() > sh.pool.temp_poolwasser(): sh.Solarheizung.Pumpe(1) logger.info("Solarheizung Pool - Ein") else: #logger.info("TempAbschalt {0}".format(sh.Messdaten.Alle.Temperatur8() + sh.Pool.Solarheizung.TempAus())) if (sh.pool.temp_solar_warm() - sh.Solarheizung.TempAus()) <= sh.pool.temp_poolwasser(): if sh.Solarheizung.Pumpe(): sh.Solarheizung.Pumpe(0) logger.info("Solarheizung Pool - Aus")
Was mache ich hier falsch?HTML-Code:File "/usr/smarthome/lib/logic.py", line 998, in _generate_bytecode self.bytecode = compile(code, self.pathname, 'exec') File "/usr/smarthome/logics/pool_heizung.py", line 13 else: ^ SyntaxError: invalid syntax
Wer hat da einen Tipp für mich?
Danke Gruß Haxley
Stichworte: -


Einen Kommentar schreiben: