Syntax-Error bei Fehlerlosem code?

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.
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Freitag 11. Februar 2011, 19:39

Hallo an alle...
Ich habe folgendes Problem:
Ich bin dabei (zu Übungszwecken) einen kleinen Passwort-Generator zu coden.
Eigentlch läuft er ganz prima, aber nahcdem ich noch ein paar letzte Ergänzungen gemacht habe, bekam ich einen Syntax-Fehler zurück und zwar an einer Stelle, an der vorher alles ok war.

Ich poste einfach mal das Stück aus dem Code, mit dem Python Probleme hat (daher fehlen die Vorgaben für die Variablen).
Sollte der ganze Code benötigt werden, kann ich den natürlich auch posten:)

Code: Alles auswählen

#Erstellung des Passworts
    if zahlen=="j" and groß=="j" and klein=="j":#An dieser Stelle wird gesagt "Syntax Error" und die ganze restliche Zeile markiert.
      for x in range(0,laenge): 
      passwortTemp=random.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890")
      passwort=passwort+str(passwortTemp)
Ich hoffe ihr könnt mir helfen.
Danke im Vorraus,
Meishere
Zuletzt geändert von Meishere am Freitag 11. Februar 2011, 19:42, insgesamt 1-mal geändert.
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
Benutzeravatar
snafu
User
Beiträge: 6024
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 11. Februar 2011, 19:42

Tja, da fehlt halt ne schließende Klammer. Den Rest spar ich mir jetzt mal, weil ich Fernsehen gucken will. :)
BlackJack

Freitag 11. Februar 2011, 19:42

@Meishere: Direkt nach dem ``if`` steht eine öffnende Klammer. Wo ist die dazugehörige schliessende Klammer?

Wobei ich eher die öffnende weglassen würde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 11. Februar 2011, 19:43

Die fehlende schließende runde Klammer ist das Problem! Die Klammerung ist zudem auch unnötig.

Mist, BlackJack war schneller :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Freitag 11. Februar 2011, 19:44

Ah sorry.
Die erste Klammer wird dort nicht benötigt (meiner Meinung nach.) Das war nur ein Test, aber auch mit schließender Klammer ging's nicht.
Habe vergessen die erste Klammer zu entfernen. Du warst schneller als ich (Ich hatte es gerade gesehen ;))

EDIT: Tja, das gleiche für BlackJack und Hyperion :D Übrigens funktioniert diese Schleife, wenn ich sie aus dem Code herausnehme, die Variablen ergänze und sie einzeln ausführe.
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Freitag 11. Februar 2011, 19:54

Hast du immer noch einen Syntax-error? (du hast offensichtlich dein Posting geändert, ohne was dranzuschreiben).

Mir fällt noch die Variable 'groß' auf: das funktioniert wenn das Encoding korrekt ist (bzw. angegeben ist, wenns nicht utf-8 ist) nur mit python 3.x, falls du unbemerkt die Dateikodierung oder den Python-interpreter gewechselt hast, geht jetzt nicht mehr.

Außerdem ist in deinem post 'for' falsch eingerückt (Mischst du etwa Tabs und Leerzeichen? das ist in python 3 nicht erlaubt).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 11. Februar 2011, 19:57

b.esser-wisser hat geschrieben:Hast du immer noch einen Syntax-error? (du hast offensichtlich dein Posting geändert, ohne was dranzuschreiben).
Leider ja!

Es könnte ansonsten noch an einer falschen Einrückung liegen, denn so, wie die if-Bedingung dort jetzt steht, ist es syntaktisch korrekt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3328
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Freitag 11. Februar 2011, 19:58

Meishere hat geschrieben:Die erste Klammer wird dort nicht benötigt (meiner Meinung nach.) Das war nur ein Test, aber auch mit schließender Klammer ging's nicht.
Habe vergessen die erste Klammer zu entfernen. Du warst schneller als ich (Ich hatte es gerade gesehen ;))
Es ist kein gute Idee, nachträglich den Fehler aus dem geposteten Code herauszueditieren. So kann niemand mehr das Problem nachvollziehen.
Meishere hat geschrieben:Übrigens funktioniert diese Schleife, wenn ich sie aus dem Code herausnehme, die Variablen ergänze und sie einzeln ausführe.
Die for-Schleife kann eigentlich nicht funktionieren, da du den auszuführenden Code nicht eingerückt hast.


Ich finde es übrigens sehr mutig Code als fehlerlos zu bezeichnen wenn die Software etwas ganz anderes dazu sagt. Du hast damit einen Bug in Python selber unterstellt und das ist gerade bei einem SyntaxError eine höchst gewagte Aussage.
Zuletzt geändert von /me am Freitag 11. Februar 2011, 20:02, insgesamt 1-mal geändert.
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Freitag 11. Februar 2011, 20:02

Ich muss mich abermals entschuldigen :)
Ich habe imemrnoch einen Syntax-Error (wie gesagt ich habe nur die Klammer entfernt, um weitere Missverständisse zu vermeiden).
Da ich Python 3.1 verwende funktioniert die Variable. Ich habe gerade vorsichtshalber zum Überprüfen noch ein kleines script mit derselben Variable geschrieben und es funktionierte einwandfrei. Außerdem wird ja auch nicht groß sinder der Bereich nach dem Doppelpunkt markiert.
Das for ist leider aufgrund des postens falsch eingerückt. (Wahrscheinlich weil ich den Kommentar nach dem Doppelpunkt erst hier im Forum dazugeschrieben habe.) Ich benutze immer brav die "4-Leerzeichen-Regel" :D

Ich habe auch schon intensive Fehlersuche betrieben, aber offenbar reichen meine Kenntnisse nicht aus :(

P.S.: Ja Hyperion hat recht ;)

EDIT: @ /me: Ich habe ja nicht den Fehler, sondern ein Überbleibsel, was da nicht sein sollte entfernt. So kann jeder das eigentliche Problem erkennen. Und zur for-schleife steht ja schon oben etwas :D
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
Benutzeravatar
/me
User
Beiträge: 3328
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Freitag 11. Februar 2011, 20:05

Meishere hat geschrieben:Ich habe imemrnoch einen Syntax-Error
Dann liegt der Fehler ziemlich sicher in der Zeile (oder den Zeilen) davor. Eine fehlende schließende Klammer oder ein nicht beendeter String gehören dabei zu den üblichen Verdächtigen.
BlackJack

Freitag 11. Februar 2011, 20:05

@Meishere: Dann wird der Fehler irgendwo vor der Schleife liegen und der Doppelpunkt ist halt die Stelle an der der Compiler merkt, dass es so keinen Sinn ergibt. Das kann zum Beispiel irgendwo vor der Schleife auch wieder eine Klammer sein, die nicht geschlossen wird.
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Freitag 11. Februar 2011, 20:07

Oh man...
Soviel zur "intensiven" Fehlersuche...
Natürlich lags an einer fehlenden Klammer. Dabei hatte ich eigentlich alle Zeilen nochmal nach fehlenden Klammern durchsucht.
Und dann war's die Zeile direkt darüber.
Naja... Danke an alle.
Und entschuldigung für meine "Blödheit" und das "stehlen" eurer Zeit :mrgreen:
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Samstag 12. Februar 2011, 10:19

Meishere hat geschrieben:Natürlich lags an einer fehlenden Klammer. Dabei hatte ich eigentlich alle Zeilen nochmal nach fehlenden Klammern durchsucht.
Und dann war's die Zeile direkt darüber.
Weiß jetzt natürlich nicht, mit welchem Editor Du arbeitest. Viele Editoren bieten neben Syntaxhighlighting auch die Funktion, zu einer Klammer das passende Gegenstück (sofern vorhanden... :wink: ) anzuzeigen.
Macht das Leben einfacher...

mutetella


P.S. Einen geposteten Code nachträglich zu verändern ist 'ne fiese Sache... :roll:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Meishere
User
Beiträge: 27
Registriert: Montag 24. Januar 2011, 16:54

Samstag 12. Februar 2011, 12:06

Naja... Ich arbeite mit dem Standart Python-Editor... Der direkt dabei ist (von der IDLE? :mrgreen: )
Vielleicht sollte ich mir wirklich nen anderen zulegen, allerdings ist das in der Schule halt so, dass dort alles eher "kompliziert" gemacht wird, weswegen zum Beispiel auf den Computern auch alle Version von 2.5 bis 3.1 vertreten sind. Aber alle PC's auf den gleichen Stand zu bringen ist natürlich keine Option (warum auch immer).
Und deswegen halte ich mich lieber an denselben Editor wie in der Schule, sonst wird's mir zu schwer immer umzudenken :D

P.S.: Ok Ok. Ich werde keinen Code mehr ändern :wink:
Gruß
Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
Peter Ustinov

Jeder Mensch macht Fehler. Das Kunststück liegt darin, sie dann zu machen, wenn keiner zuschaut.
Peter Ustinov
BlackJack

Samstag 12. Februar 2011, 13:05

@Meishere: Vielleicht noch mal eine eher inhaltliche Anmerkung zu dem Quelltext:

Der gezeigte Quelltext lässt vermuten, dass Du da bis zu acht solcher ``if``-Anweisungen im Programm hast, bei denen im Grunde immer der gleiche Inhalt steht bis aus was beim `choice()`-Aufruf als Argument steht. Darüber solltest Du noch einmal nachdenken, denn solche Quelltextwiederholungen sollte man vermeiden. Die machen Programme unnötig lang und fehleranfällig; insbesondere wenn man mal Änderungen vornimmt und immer aufpassen muss, dass man alle "Kopien" entsprechend ändert.

Was bewirkt eigentlich der `str()`-Aufruf bei `passwortTemp`?

Und zur Form:

Ob und wie die Einrückung im Original aussieht ist ja nicht so ganz klar, darum ist das vielleicht unnötig, dass ich auf die vier Leerzeichen pro Einrückebene aus dem Style Guide hinweise. Ansonsten empfiehlt der noch Leerzeichen um Operatoren und Zuweisungen (ausserhalb von Argumentlisten) und ein Leerzeichen nach Kommas. Das dient der besseren Lesbarkeit.

Bei der Namensgebung sagt der Style Guide für alles ausser Klassennamen und Konstanten eigentlich Kleinbuchstaben und Unterstriche, also `passwort_temp` statt `passwortTemp`. Der Name könnte treffender gewählt werden. `passwort_zeichen` oder nur `zeichen` zum Beispiel. Oder man lässt den Zwischenschritt über einen extra Namen ganz weg.
Antworten