Python Programm schaltet falsch

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Sorry, ich bin mit dem geänderten Code nicht zufrieden.

    Wegen Zeile 31 und 32 und weil das Textfile mit einem (Windows ?) Text Editor (der nicht auf Linux LF und UTF-8 Zeichensatz umgestellt wurde) wahrscheinlich erstellt wurde. Da sind zukünftige Scriptfehler vorprogrammiert.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Und? Dadurch werden die 2 Zeilen auch nicht besser

    1. Müssen die wenn vertauscht werden, erst Shebang dann Codingeinstellung

    2. Python2 ist veraltet, wenn muss/soll der Shebang auf Python3 zeigen, vorallem weil er es eh richtigerweise mit python3 <skript> aufruft

    3. Sollte man UTF-8 verwenden, da ist die Codingzeile nicht notwendig

  • Hallo Forum,


    RTFM

    es braucht sich hier keiner bei mir zu Entschuldigen (Post#21 Sorry,...), ich sehe es eher als Hilfe an und bin Dankbar.

    zu:

    Zitat

    .....Textfile mit einem (Windows ?) Text Editor (der nicht auf Linux LF und UTF-8 Zeichensatz umgestellt wurde......

    Es ist so das ich hier unten in der Küche gerne mit meiner Frau eine Kaffee trinke und über einen WIN10/Linux Mint 19.2 Laptop oben im Hobbyzimmer auf den Raspberry PI über Remote Desktop zugreife. Den Code des Programmes dann aus dem Terminalfenster des Raspberry PI markiere, kopiere und hier einfüge.

    Zudem hatte ich diesen dann auch farblich verändert (blau = Änderung, rot = Löschung des Textes).

    Nach dem "abschicken" änderte sich der Text und die Einrückung???. Die Einrückungen habe ich dann mit der Leertaste gemacht.

    Desweiteren habe ich erklärt das ich jetzt erst einmal den Code verstehen und begreifen muss.

    UND HIER FÄNGT ES SCHON BEI DER ERSTEN ZEILE (31)AN.

    Das Zeichen "#" bringt mich z.B. durcheinander. Im Programm z.B. :

    #-*- coding: iso-8859-15 -*-

    Ich dachte das Zeichen "#" würde für Kommentare gelten.

    Hier hatte ich es so verstanden, dass alles was hinter diesem Zeichen "#" ist,

    als nicht vorhanden für das eigentliche Programm betrachtet wird.

    Das : "#-*- coding: iso-8859-15 -*-" ist somit nicht das Gleiche wie

    das : " LEER "

    "#-*- coding: iso-8859-15 -*-" hier wird das Programm normal ausgeführt (incl. Umlaute)

    " LEER " hier wird das Programm abgebrochen mit:

    File "/home/pi/Tkinter/io.py", line 10

    SyntaxError: Non-UTF-8 code starting with '\xd6' in file /home/pi/Tkinter/io.py on line 10, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    " -*- coding: iso-8859-15 -*- " ebenfalls Abbruch:

    File "/home/pi/Tkinter/io.py", line 1

    -*- coding: iso-8859-15 -*-

    ^

    SyntaxError: invalid syntax

    Hier sind bei mir schon Denkfehler, da vor "-*- coding: iso-8859-15 -*-" das "#" steht.

    zu

    "Zeile 32" mit "#!/usr/bin/python"

    hier gestehe ich das ich mir noch keine Gedanken gemacht habe welche Auswirkung diese Zeile hat.


    zum Code:

    hier habe ich für die Einrückung vorher Leertasten verwendet. Hier oben die Tab-Taste verwendet.

    Meine Bezeichnung für z.B.

    Code
    ADDRESS_DIGI_OUT01 = 0x20
    Code
    ADDRESS_DIGI_IN01 = 0x3f

    finde ich selbst zu lang gewählt.

    Wie gesagt, werde ich mich Zeile für Zeile informieren, welchen Sinn oder Bedeutung diese Zeilen habe.

    Desweiteren auch welche Namensgebung am besten wäre.

    Nochmals vielen Dank für eure Hilfe und ich würde mich freuen weiter eure Unterstützung zu erhalten/lesen zu dürfen.

    Gruß aus Dorsten(NRW)

    Herbert

  • Hallo Forum

    fred0815

    Meine Frage zu:

    Zitat

    "..Naja, dem Shebang wird ja auch ein # vorangesetzt und dennoch wird es interpretiert.."

    und warum nicht ?

    woher weiß Python was hinter dem " # " steht. Liegt es an den Sonderzeichen? Wir haben oben in den ersten zwei Zeilen das " # " gefolgt von einem " _ " oder einem " ! ". Das Shebang ist eine Zeichenkompination aus " # " und " ! " (habe es laut www so verstanden). So müßte Python immer nach zwei Zeichen direkt hintereinander suchen um festzustellen das es sich hier um Shebang handelt. Bei Kommentaren das " # " und direkt danach schauen ob es kein " ! " ist und dann entscheiden das es sich hier nur um einen Kommentar handelt ?.

    Was nun ist dann hier das Shebang?. Das " ! " oder das " #! " oder beide Zeichen zusammen ergeben das Shebang?

  • Das shebang hat mit Python nichts zu tun, sondern ist eine Konvention unter UNIX im allgemeinen. Und MUSS in der ersten Zeile stehen. Und ist immer #! gefolgt von dem Programm, dass dann ausgefuehrt werden soll.

    Das ist zB genau so bei Shell-Skripten:

    Bash
    #!/bin/bash
    echo "ich bin ein shell skript"

    Der zweite Header ist eine Python-spezifische Sache, wobei das auch nicht aus dem Himmel faellt. Auf genau die Art und Weise arbeitet traditionell auch so mancher Linux-Editor (wie zB mein geliebter Emacs), und erlaubt damit, Variablen oder andere Dinge zu deklarieren.

    Im Grunde ist das eine Anweisung, die keinen Code darstellt, aber eben von jemandem, der die Datei liest (und ggf schreibt) wie deinem Editor, aber auch dem Python-Interpreter, ausgewertet wird. Und die Festlegung des Encodings macht. In Python 2 kann die Zeile fehlen, und es wird dann angenommen das encoding sei ascii. In Python 3 wird stattdessen utf-8 angenommen. Darum *kann* man die Deklaration weglassen in Python3, aber natuerlich muss der Editor immer sicher stellen, dass er UTF-8 liest und schreibt beim programmieren.

  • Hallo Forum

    @_deets_

    Vielen Dank,

    ich glaube das ich die beiden Zeilen soweit verstanden habe.

    In Python2 wird davon ausgegangen das ich nur die Zeichen verwende die im ASCII Zeichensatz vorkommen. Hier bleibt für mich natürlich die Frage zu:" ...es wird dann angenommen das Encoding sei ascii...". Was passiert wenn nicht?.

    Python3 darüber den erweiterten Zeichensatzt, wobei hier dann auch die Umlaute äÄ, öÖ, üÜ und ß enthalten sind.

    Hier noch einmal dann zu Erklärung:"Ich wollte gerne am Anfang NUR ein kleines Erfolgserlebnis sehen, um jetzt Schritt für Schritt etwas über Python zu lernen. Mein Fehler liegt darin, das ich leider es nicht lange durchhalte Seite für Seite eines Buches durchzugehen. Drei vier Bücher habe ich über Python/Raspberry PI schon hier liegen, gehöre aber zu denen die am Anfang alles 1zu1 nachmachen und am Schluß merken das wir den eigentlichen Sinn nicht verstanden haben. Damit möchte ich erklären, das ich z.B. eine größere Ampelschaltung nachgebaut und programmiert habe, die auch wunderbar funktioniert, hier aber schon bei Fragen von euch in Erklärungsnot komme wofür den eigentlich diese Zeile oder diese Zeile steht. Deshalb habe ich mir es diesmal vorgenommen Schritt für Schritt den eigentlichen Code, wie diesen hier zu verstehen. Mein ersten Problem hier war schon das Einrücken des Code's. Nehme ich Leertasten oder z.b. die TAB-Taste oder ?.

    Also nochmals ein Danke aus Dorsten(NRW)

    Herbert

    • Offizieller Beitrag

    Nehme ich Leertasten oder z.b. die TAB-Taste

    Du nimmst genau 4 mal die Leertaste. Einige Schreibprogramme kann man einstellen, dass beim drücken der TAB-Taste 4 Leerzeichen geschrieben werden.

    ( Edit: Bevor hier wieder Diskussionen Aufkommen... Einrückungen können auch 2 oder 3 oder x Leerzeichen oder TAB sein, dann aber immer die gleiche Anzahl im Skript. Allerdings gibt es Die Empfehlung mit 4 Leerzeichen um den Style zu vereinheillichen, damit Skripte auch von anderen Programmierern gut gelesen werden können. Das betrifft auch andere Aspekte der Programme. Siehe dazu hier: PEP8 )

    Womit schreibst Du Deine Skripte und wie kommen die ggf. auf den RPi? Falls Du das schon erwähnt hattest, dann (sorry!) habe ich es schon wieder vergessen und muss alles nochmals lesen.

  • Hallo Forum,

    hyle

    Habe ich gemacht. Wenn ich es richtig verstehe habe ich jetzt dem Editor "nano" durch das Eintragen in der ".nanorc" eine Art Voreinstellung des TAB auf 4 Leerzeichen übergeben.

    Aus Neugier habe ich eine 40 Eingegeben um zu sehen wo der Coursor hinspringt. Macht er :)

    besten Dank.

    Gehe ich dann im Code immer 4 Leerzeichen weiter. Meine es so gesehen zu haben.

    Deweiteren dann sofort die nächste Frage:

    Wie mache ich es dann bei einem sehr langen Bereich wie z.B.

    Code
    B0 = Button(buttonFrame, text="Sliderwert anzeigen", bg="#42ebf4", width=15, command=callback3)

    Gibt es hier auch eine Empfehlung um den Text übersichtlicher zu gestalten?

    Code
    B3 = Button(buttonFrame, text="Sliderwert anzeigen", 
                                bg="#42ebf4", 
                                width=15, 
                                command=callback3)

    So z.B. wie oben?

    Ich muss hier einmal aufhören. Ich glaube das ich hier jetzt zu weit vom Thema abkomme da mein Problem schon gelößt wurde auch wenn es nicht Optimal von meiner Seite geschrieben worden war(Code mäßig).

    Würde gerne dieses Thema schliessen und wenn es erlaubt ist ein neues Aufmachen.

    Gruß aus Dorsten(NRW) und vielen Dank

    Herbert

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!