Posts by noisefloor

    Hallo,


    wusa : vielleicht solltest du nochmals die entsprechenden Sektionen im offiziellen Python-Tutorial auf docs.python.org durcharbeiten. Der Zugriff auf mehrelementige Datentypen wie z.B. Listen, Tuple und Dicts ist essentiell wichtig. Das sind absolute Grundlagen, die man verinnerlicht haben muss. Sonst wird das nix mit der Python-Programmierung.


    Gruß, noisefloor

    Hallo,


    sieht doch besser aus :-) Im gezeigten Code hat Zeile 10 `return data` keinen Sinn, weil im Aufruf (Zeile 15) kein Rückgabewert erwartet wird. Außerdem liefert die Funktion so wie so nur das zurück, was rein gegeben wurde.


    Gruß, noisefloor

    Hallo,


    Quote

    Doch, list_old bzw. mittlerweile list_backup brauche ich unbedingt und das war quasi auch genau das, wonach ich hier fragte. Wenn die Datei nicht gelesen werden kann, ist die Liste leer --> list [].

    Nein, brauchst du _nicht_. Du hast lediglich einen konzeptionellen Denkfehler. Wenn die gelesene Liste leer ist, dann überschreibst du die bestehende Liste halt _nicht_. Dann sparst du dir auch die Krücke via old_list oder was auch immer.

    Und wenn die Liste leer ist, dann rufst du halt _nicht_ update_text auf.

    Du solltest hier nochmal die Aufteilung von deinem Code überdenken und das ggf. auf mehr Funktionen aufteilen.


    Mal abgesehen davon kennen wir deinen restlichen Code nicht. Und auf Basis des gezeigten Codes kann keiner Wissen, ob du ggf. die Liste noch woanders brauchst. So was musst du dann schon explizit von Anfang an sagen.


    Der Code Post #11 ist ein bisschen schräg. Zeile 3 ist schräg - wozu ist das, eine Liste mit leeren Strings? Wenn du Platzhalter brauchst, nimm' `None`. Zeile 4 ist schräg - `__init__` ohne Klasse? Zeile 15 ist schräg. Ja, das geht, aber Listen kennen eine Methode `clear`, das ist schöner. Die Frage ist auch, warum du die Liste nicht direkt leer anlegst. Weil: im gezeigten Code wir die Default Liste nie benutzt, sondern wenn nur geleert.


    Ansonsten ignorierst du scheinbar geflissentlich, was ich dir zu Variablennamen geschrieben habe. Wenn du früher oder später scheinbar nicht nachvollziehbare Fehler bekommst, denk' einfach nochmal an das, was ich dir in Post #3 geschrieben habe.


    Gruß, noisefloor

    Hallo,


    dann denk' mal scharf drüber nach, ob du list_old überhaupt brauchst... Und wenn du dann richtigerweise zu dem Ergebnis gekommen bist, dass das es nicht brauchst, überdenkst du nochmal den Code im `else` Block, der zu `try` gehört.


    Wenn die Datei `test.txt` existiert - egal ob leer oder nicht - , dann wird der `try` Block immer durchlaufen und nie eine Exception werfen.


    Nackte try...except sind fast immer falsch, weil du damit _alle_ Fehler, inkl. Programmierfehler abfängst. Willst du aber nicht.


    Zeile 7 im Code aus Post #9 ist überflüssig, weil du damit die Variablen nur zusätzlich an einen weiteren Namen bindest.


    Welchen Sinn hat das `return` Statement der Funktion `read_txt`?


    Tipp: Programmieren ist nicht raten und Programmieren ist nicht Copy & Paste. Denk' mal _in_Ruhe_ über den Ablauf dieses Programmteils nach, male ihn dir auf ein Blatt Papier inkl. aller gewünschten bzw. möglichen Verzweigungen und dann schreibst du den Code neu.


    Gruß, noisefloor

    Hallo,


    Quote

    leider laufe ich hier in den gleichen error. den index error bekommt er erst in "_update_Text", da er dort in der 2ten Zeile erst merkt, dass die Liste leer ist.

    Ach stimmt - Denkefehler meinerseits. Dann müsstest du z.B. nach dem Lesen und vor dem Aufruf _update_text z.B. die Länge der Liste prüfen.


    Gruß, noisefloor

    Hallo,


    Quote

    wenn ich deinen code richtig verstehe muss ich nun read_text() regelmäßig ausführen?

    Richtig, und read_text für _update_text aus. _updatr_text muss ja nicht aufgerufen werden, wenn read_text kein Ergebnis hat.


    Quote

    Ich wollte hier für euch selbst erklärende variablen nutzen,

    Äh... du solltest in erster Linie für DICH (!) selbsterklärende Variablen nutzen. Du hast den größten Nutzen davon, nicht wir.


    Gruß, noisefloor

    Hallo,


    `list` ist ein ganz schlechter Name für einen Variable, weil du damit die Build-In Funktion `list`überschreibst. Was zu "lustigen" Nebeneffekten führen kann.


    Bzgl. der Logik: Wenn ein Fehler auftritt führst du einfach `updateText`nicht aus. BTW: Funktionsnamen werden klein_mit_unterstrich geschreiben.


    Also vom Prinzip:

    Python
    1. def _update_text(...):
    2. #do something
    3. def read_text(...):
    4. try:
    5. #einlesen
    6. except IndexError:
    7. pass
    8. else:
    9. _update_text(neuer_text)

    Gruß, noisefloor

    Hallo,

    ggf. wenn man in der Doku rumwühlt ginge es auch ohne slice. Gibt sicherlich einen Weg, direkt an die Stunden zu kommen...

    Nope, gibt's nicht. Mit datetime.datetime.now().astimezone().utcoffset().seconds bekommt man die Sekunden als Integer. Aber timedelta-Objekte kennen ootb keine Methode für Stunden. Die nächste Einheit sind Tage.


    Gruß, noisefloor

    Hallo,


    `sudo poweroff` sollte durch das aktuelle `systemctl poweroff` ersetzt werden. Ich kann gerade nicht testen, ob das unter Raspbian Root-Rechte benötigt - unter Ubuntu jedenfalls nicht, womit man kein `sudo` braucht bzw. das Skript nicht überflüssiger Weise mit Root-Rechten laufen lassen müsste.


    Gruß, noisefloor

    Hallo,


    Quote

    So bekomme ich die eigentlich richtige Fehlermeldung, das der GPIO 3 schon belegt ist.

    Richtig. Weil in Zeile 6 bindest du `button` an Pin 3 - darum kannst du das in Zeile 26 nicht nochmal machen, weil der Pin belegt ist.


    Quote

    Leider werde ich aus der GPIOZERO-DOC nicht schlau.

    Heißt konkret...? Was verstehst du wo nicht?


    Gruß, noisefloor

    Hallo,


    zum Öffnen des Browsers möchtest du das`webbrowser` Modul nehmen, was Python standardmäßig an Bord hat. Der Umweg über `subprocess` ist nicht nötig.


    Der Weg funktioniert später so oder so auch nur, wenn ein Dienst (wie der XServer) läuft, auf dem dem Browser dargestellt werden kann. Auf einem Headless-System ohne Grafik funktioniert das nicht.


    Es gibt aber auch diverse text-basierte Audioplayer, die Radiostreams abspielen können. Dazu braucht man keine schwergewichtigen Browser.


    Gruß, noisefloor

    Hallo,


    Quote

    Bei genauer Betrachtung fallen mir an einzelnen Stellen Unterschiede zwischen P2 und P3 auf.

    Pauschal würde ich sagen: soll eigentlich nicht sein. SVG ist ja ein Grafikformat, was den darzustellenden Inhalt als XML beschreibt. Das XML in ein Bild umzuwandeln ist dann Sachen der Rendering-Engine.

    Grundsätzlich könnte es schon sein, dass verschiedene Rendering-Engines ein leicht anders Ergebnis liefern oder das beim Umskalieren der Grafik das ganze anders wirkt. Lässt sich so von aussen aber schlecht sagen.


    Gruß, noisefloor

    Hallo,


    axo - ja, das ist so: wenn du in Python zwei Integer dividierst, bekommst du immer einen Integer zurück. Auch, wenn das Ergebnis eigentlich ein Float wäre. Dann rundet Python 2 immer ab. Python 3 rechnet "richtig", d.h. liefert wenn die Division nicht glatt ist, einen Float zurück. Das ist aber auch bei den Unterschieden P2 <-> P3 dokumentiert.


    Du musst deinen Code halt leicht anpassen, z.B. in dem du `font_size = int(h/14)` schreibst. Läuft so auch unter P2 und liefert unter P3 das gewünschte Ergebnis.


    Gruß, noisefloor

    Hallo,


    > Warum hat Python2 sich nicht beschwert?

    Beschwert = Warning oder Error?


    Nutzen Pygamg für P2 und P3 den gleiche Code / das gleich Python-Modul oder wird das getrennt ausgeliefert?

    Aber das Verhalten vpn P3 würde ich als richtig bezeichnen und das von P2 als "suboptimal" - was anderes als ein Integer macht hier ja IMHO keinen Sinn.


    Ansonsten ist das wohl eher eine Frage für die Entwickler von Pygame... ;-)


    Gruß, noisefloor

    Hallo,


    KSCNeon : grundsätzlich stellt sich die Frage, ob das _wirklich_ parallel laufen muss (dann brauchst du Multiprocessing) oder ob "quasi-parallel" (= sequentiell, aber jeder kommt oft genug daran = kooperatives Multitasking) nicht reicht.


    Bei "echter" Parallelität hast du ja immer noch das Problem, dass du irgendwie irgendwo die "gleichzeitig" eintreffenden Sensordaten verarbeiten musst, und das passiert in der Regel sequentiell. Abgesehen davon kann die Kommunikation zwischen verschiedenen Prozessen eine nicht-triviale Angelegenheit in der Umsetzung sein.


    Da das ganz Thema aber ein wenig komplexer ist empfiehlt es sich, dafür einen eigenen Thread zu Starten.


    Gruß, noisefloor