Erste Programme in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Hallo
mache gerade meine ersten Gehversuche in Python 3.
Das hat schon mla geklappt:

from gpiozero import LED
from time import sleep
red = LED(14)
while True:
red.on()
sleep(1)
red.off()
sleep(1)

Als Alternative wird das angegeben:

from gpiozero import LED
from signal import pause
red = LED(14)
red.blink()
pause()

Dabei bekomme ich die Fehlermeldung line 4, red.blink()

Leider ist mir unklar was der Fehler ist. Könnte mir jemand das erklären.

achim
Benutzeravatar
sparrow
User
Beiträge: 4514
Registriert: Freitag 17. April 2009, 10:28

Wie lautet denn die komplette Fehlermeldung?
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird in Python immer mit 4 Leerzeichen pro Ebene, nicht 3.
Jetzt wäre es schön zu wissen, welche Fehlermeldung Du bekommst.
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo achim0401

schau mal hier:https://gpiozero.readthedocs.io/en/rest ... t.html#led

Code: Alles auswählen

blink(on_time=1, off_time=1, n=None, background=True)
Gruss Peter
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Fehlermeldung:

Traceback (most recent call last):
File "/usr/lib/python3.7/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "/home/pi/Blink1_3.py", line 4
red.blink()
^
IndentationError: unexpected indent
Benutzeravatar
sparrow
User
Beiträge: 4514
Registriert: Freitag 17. April 2009, 10:28

"Indention" ist "Einrückung".
In Python ist die Einrückung fundamental, weil damit Blöcke definiert weren.
Wie die Fehlermeldung dir sagt: Etwas stimmt dort mit der Einrückung nicht. "Unerwartete Einrückung". Die wird aus dem Code, den du hier gezeigt hast, aber nicht ersichtlich.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Das blink muß genauso tief eingerückt sein, wie die Zeilen drumrum:

Code: Alles auswählen

from gpiozero import LED
from signal import pause
red = LED(14)
red.blink()
pause()
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

from gpiozero import LED
from signal import pause
red = LED(14)
red.blink()
pause()

Es ist 4 mal eingerückt im ori. Habe es noch mal kontrolliert. Es könnte sein das es hier anders aussieht
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Mis.. Es wird anders dargestellt als es wirklich ist. Muss noch lernen wie man so was macht. Es ind wirklich 4 frei tasten da vor
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt Code Tags. Das ist der </>-Knopf im vollständigen Editor. Bitte in Zukunft benutzen.
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Code: Alles auswählen

from gpiozero import LED
from signal import pause
red = LED(14)
    red.blink()
    pause()
mal sehen ob das besser aussieht
Benutzeravatar
sparrow
User
Beiträge: 4514
Registriert: Freitag 17. April 2009, 10:28

Geht es.
Und ich sehe das wie Python: Unerwartete Einrückung.
Weißt du warum Einrückungen in Python wichtig sind? Hast du das offizielle Tutorial mal durchgearbeitet?
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Es kommt immer noch die Fehlermeldung. Das Einrücken wie es jetzt ist wurde von Python selber vorgenommen. Habe es auch noch mal nachgezählt, es sind 4 mal bei beiden Zeilen vorhanden. Habe auch das Tut durchgearbeitet. In anderen Programmen funktioniert es ohne Probleme
Benutzeravatar
sparrow
User
Beiträge: 4514
Registriert: Freitag 17. April 2009, 10:28

Es macht keinen Sinn, dass die 4. Zeile in deinem Code eingerückt ist. Und es ist syntaktisch falsch.
Mit einer Einrückung bildet man einen Block. Zum Beispiel um den Rumpf einer Funktion, Schleife oder Bedingung zu kennzeichnen.
Aber hier hast du willkürlich Zeilen eingerückt. Warum?
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Ich habe keine Zeilen willkürlich eingerückt. Das hat Python allein gemacht bzw. vorgegeben. Es ist so von Python gemacht worden wie es im Beitrag von 17:12 steht
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Python macht da ueberhaupt nichts. Bestenfalls macht deine IDE die du benutzt etwas. Und auch das waere ungewoehnlich, dass die das tut, ohne das du das gewollt hast. Das machen IDEs zb wenn man eine if-Anweisung schreibt, um danach dann gleich im eingerueckten Block weiter zu schreiben. Aber nicht einfach so.

Ohne das du verstehst, warum in Python eingerueckt wird, kannst du kein Python schreiben. Weisst du, wozu die Einrueckungen in Python sind?
achim0401
User
Beiträge: 19
Registriert: Donnerstag 23. Juli 2020, 15:12

Damit werden Blöcke definiert
Benutzeravatar
pillmuncher
User
Beiträge: 1527
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

achim0401 hat geschrieben: Montag 7. Dezember 2020, 18:54 Ich habe keine Zeilen willkürlich eingerückt. Das hat Python allein gemacht bzw. vorgegeben. Es ist so von Python gemacht worden wie es im Beitrag von 17:12 steht
Das kann nicht sein. Dein Editor hat das womöglich getan, aber Python ist kein Editor. Womit schreibst du deine Programme?
In specifications, Murphy's Law supersedes Ohm's.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

achim0401 hat geschrieben: Montag 7. Dezember 2020, 19:14 Damit werden Blöcke definiert
Eben. Du hast also einen Block definiert, wo keiner hingehoert. Egal ob da jetzt der Editor zwischengefunkt hat oder nicht (was ich fuer ziemlich unwahrscheinlich halte), Fakt ist: da gehoert kein Block hin.
Benutzeravatar
snafu
User
Beiträge: 6833
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wahrscheinlich wurde bei einem Zwischenstand des Codes die Einrückung vom Editor / IDE gesetzt, weil an der Stelle tatsächlich mal ein Block eingeleitet wurde. Selbst das könnte unabsichtlich geschehen sein, wenn beim Lernen ein Doppelpunkt gesetzt wurde, wo keiner hingehört. Fakt ist jedenfalls, dass der Fehler an der Einrückung liegt. Wenn man die raus nimmt und nicht "ewig" darüber diskutiert, dann wird auch die Fehlermeldung verschwinden.
Antworten