Python Script: mit Geany, OK, mit Thonny, Fehler

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Hallo Forum,
    hat jemand darauf eine Erklärung?
    Das Script von http://www.netzmafia.de/skript…e/RasPi/RasPi_Serial.html

    läuft in Geany korrekt durch, mit Thonny jedoch gibt es diese Fehlermeldung:

     Python 3.7.3 (/usr/bin/python3)

    >>> %Run test.tty.py

    Traceback (most recent call last):

    File "/home/pi/Desktop/test.tty.py", line 17, in <module>

    ser.write(outStr)

    File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 532, in write

    d = to_bytes(data)

    File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes

    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))

    TypeError: unicode strings are not supported, please encode to bytes: '!'


    Wo liegt der Fehler?
    Ist Python nicht gleich Python, egal mit was es ausgeführt wird? :conf:
    Mir hängt das zu hoch!

  • Da die IDEs der shebang nicht interessiert, ist es einmal python 2, einmal Python 3. So einfach ist das.

  • Hallo __deets__,
    danke für den Hinweis.

    print("...") ist eindeutig python 3, und geany beschwert sich nicht?
    Siehe Einstellung unter "Erstellen", "Kommandos zum Erstellen konfigurieren", dort das Label "Execute" von python "%f" zu python3 "%f" ändern.
    Jetzt wird das Script als python3 ausgeführt.
    Dazu müssen die Zeilen 17 - 32 so geändert werden:

    Python
      ser.write(outStr.encode())
      time.sleep(0.05)
      inStr = ser.read(ser.inWaiting())
    
    print ("inStr =  " + inStr.decode())
    print ("outStr = " + outStr)
    if(inStr == outStr.encode()):

    Edited once, last by AndreasO ().

  • Hallo,


    für mich sieht es so aus, als ob 'Geany' merkt ob es das Programm mit Python2 oder Python3 ausführen soll.

    Ich kann in 'Geany' print 'Hallo' eingeben und bekommen 'Hallo' ausgegeben und wenn ich das gegen print('Hallo') ersetze (ohne irgendwelche Einstellungen zu ändern) bekomme ich 'Hallo' ausgegeben.

    'Thonny' ist von Werk auf Python3 eingestellt, da läuft nur print('Hallo').


    Dazu müssen die Zeilen 17 - 32 so geändert werden:

    Wenn du Python3 verwendest, dann ändere gleich die Stringerstellung ab:


    Python
        ser.write(outStr.encode())
        time.sleep(0.05)
        inStr = ser.read(ser.inWaiting())
    
    print (f"inStr =  {inStr.decode()}")
    print (f"outStr = {outStr}")

    Konstanten schreibt man GANZ_GROß, Variablen und Funktionen klein_mit_unterstrich und Klassen in CamelCase-Schreibweise. Für Namen sollte man keine Abkürzungen nehmen. Das macht den Code nur schwerer lesbar. 'If'-Abfragen benötigen keine Klammern und man muss nicht speziell nach 'True' abfragen.


    Ungetestet und die Namen sind geraten:

    Man könnte/sollte das jetzt noch schön in Funktionen aufteilen.



    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • print(“hallo”) hat schon immer in Python 2 funktioniert. Es ist einfach eine extra Klammer, die weg optimiert wird. print((((12345)))) tut übrigens auch.


    Insofern beschwert sich da auch niemand.

  • AndreasO An dem Quelltext ist nichts „eindeutig Python 3“, im Gegenteil. Die She-Bang-Zeile deutet auf Python 2 hin, ebenso der in Python 3 in der Form überflüssige Kodierungskommentar, und nicht zuletzt dass das in Python 2 läuft, in Python 3 aber fehlerhaft ist, weil da versucht wird Text an eine API zu übergeben die Bytes erwartet.


    Syntaktisch ist der Quelltext in Python 2 und 3 korrekt, also worüber sollte sich Geany da beschweren? Man darf auch in Python 2 unnötige Klammern um Ausdrücke setzen oder Tupel als Ausdruck hinter der ``print``-Anweisung stehen haben.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors