Seite 1 von 2
Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:39
von Meishere
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
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:42
von snafu
Tja, da fehlt halt ne schließende Klammer. Den Rest spar ich mir jetzt mal, weil ich Fernsehen gucken will.

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:42
von BlackJack
@Meishere: Direkt nach dem ``if`` steht eine öffnende Klammer. Wo ist die dazugehörige schliessende Klammer?
Wobei ich eher die öffnende weglassen würde.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:43
von Hyperion
Die fehlende schließende runde Klammer ist das Problem! Die Klammerung ist zudem auch unnötig.
Mist, BlackJack war schneller

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:44
von Meishere
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

Übrigens funktioniert diese Schleife, wenn ich sie aus dem Code herausnehme, die Variablen ergänze und sie einzeln ausführe.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:54
von b.esser-wisser
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).
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:57
von Hyperion
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.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 19:58
von /me
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.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 20:02
von Meishere
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"
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

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 20:05
von /me
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.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 20:05
von BlackJack
@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.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Freitag 11. Februar 2011, 20:07
von Meishere
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

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 10:19
von mutetella
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...

) anzuzeigen.
Macht das Leben einfacher...
mutetella
P.S. Einen geposteten Code nachträglich zu verändern ist 'ne fiese Sache...

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 12:06
von Meishere
Naja... Ich arbeite mit dem Standart Python-Editor... Der direkt dabei ist (von der IDLE?

)
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
P.S.: Ok Ok. Ich werde keinen Code mehr ändern
Gruß
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 13:05
von BlackJack
@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.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 13:53
von mutetella
Eventuell könnte auch
das hier für Dich interessant sein...
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 15:33
von Meishere
Danke für die tipps

@BlackJack: Wie gesagt benutze ich immer brav die vier Leerzeichen

Das mit den Variablen Namen hab ich vergessen, stimmt. Leider wird auch soetwas in der Schule nicht erwöhnt, was allerdings von Vorteil wäre.
Und dass man Wiederholungen vermeiden sollte ist mir auch klar, allerdings bin ich noch ein Anfänger und mir fällt keine passende Lösung ein. Das einzige ist "elif", allerdings ist der Unterschied zu wiederholtem "If" ja nicht so groß (zumindest auf die Quelltextlänge bezogen. Ich habe übrigens 5 von diesen If-Anweisungen

)
Der str()-Aufruf bewirkt in diesem Fall... gar nichts... wie gerade auffält
Ich hatte das generieren des Passwortes vorher über einen anderen Weg versucht und da hat der str-Aufruf bewirkt, dass das Programm die Zahlen mit den Buchstaben "addieren" kann, sodass ein Passwort aus Buchstaben und Zahlen entsteht.
@mutetella: Danke für den Link. Die documentation kenne ich natürlich, aber ich kenne (noch?) nicht alle Aufrufe. Daher hilft mir das villeicht. Ich muss mir das mal in Ruhe durchlesen.
Gruß,
Meishere
EDIT: @BlackJack: Ich habe auch deinen Vorschlag die Temp-Variable rauszunehmen beherzigt und verstanden (

) Das war auch noch von dem ersten Versuch übrig und ich dachte ich würde es brauchen.
@mutetella: Das string-module hilft auf jedenfall den Quelltext ein wenig kleiner zu machen, danke

Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 15:46
von BlackJack
@Meishere: ``elif`` würde ja auch nicht die Wiederholungen vermeiden. Wenn man mal hinschreibt was alle ``if``-Zweige gemeinsam haben und das was bei jedem anders ist durch einen Namen ersetzt, dann dürfte diese Schleife doch ungefähr so aussehen:
Code: Alles auswählen
passwort = ''
for _x in range(laenge):
zeichen = random.choice(erlaubte_buchstaben)
passwort += zeichen
Und diese Schleife sollte nur einmal im Programm stehen. Vor der Schleife musst Du Dir jetzt überlegen was Du an `erlaubte_buchstaben` bindest. Und zwar mit weniger als fünf ``if``-Abfragen. Mit ``if``\s die nur ganz einfache Bedingungen enthalten -- ohne ``and`` oder so.
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 16:32
von Meishere
Also die einzige Lösung die mir einfällt, würde immernoch 5 if-anweisungen beinhalten. Wenn man fünf verschiedene Mlglichkeiten hat, die über eine Benutzereingabe ausgewählt werden, dann geht das doch nicht anders oder?
Re: Syntax-Error bei Fehlerlosem code?
Verfasst: Samstag 12. Februar 2011, 16:38
von DaMutz
@Meishere: aber es sind doch nur 3 Bedingungen die jeweils 'True' oder 'False' sein können? Dann sollte es auch mit 3 einfachen if-Bedingungen möglich sein.