`SyntaxError` beim Öffnen einer Datei

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
hexflame
User
Beiträge: 11
Registriert: Freitag 18. März 2016, 20:49

Ich habe ein Modul für ein Spiel geschrieben welches eine Ebene in einer Welt 'generieren' soll. Aber beim importieren kommt ein `SyntaxError` in Zeile 13 aber ich habe keine Ahnung was da falsch ist. Sieht selbst.

Code: Alles auswählen

from random import choice
from json import dump

def pattern(layer, username)
        room = int(coice('123456'))
        item = int(choice('123456'))
        if room % 3 == 0:
                monster = room / 3
        elif room % 2 == 0:
                monster = room / 2
        else:
                monster = int(choice('1234'))
        file = open ('/home/' + username + '/.local/share/save/pattern.file', 'w') # Hier soll der Fehler sein
        dump({'room' : room, 'item' : item, 'monster' : monster}, file)
        file.close()
      
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@hexflame: in Zeile 4 ist bereits ein SyntaxFehler. In Zeile 13 kann ich keinen sehen.
hexflame
User
Beiträge: 11
Registriert: Freitag 18. März 2016, 20:49

Sirius3 hat geschrieben:@hexflame: in Zeile 4 ist bereits ein SyntaxFehler. In Zeile 13 kann ich keinen sehen.
Ups ist mir woll beim abschreiben passiert.Dennoch gibt er bei mir an, dass das

Code: Alles auswählen

file = open("/home/" + username + "/.local/share/save/pattern.file","w")
ein `SyntaxError` sei sobald ich es importieren will.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hoer mal bitte auf, Dinge abzuschreiben - das fuehrt, wie du schon selbst gemerkt hast, man Transkriptionsfehler macht.

Und bitte poste deine genaue Fehlermeldung. So sieht es naemlich an sich ok aus, da muss also etwas anderes im Original sein.
hexflame
User
Beiträge: 11
Registriert: Freitag 18. März 2016, 20:49

Hier ist die Fehlermeldung

Code: Alles auswählen

    file = open('/home/' + username + '/.local/share/save/pattern.file', 'w')
       ^
SyntaxError: invalid syntax
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@hexflame: das bedeutet, dass in der Zeile davor etwas nicht stimmt, z.B. Klammer vergessen.
hexflame
User
Beiträge: 11
Registriert: Freitag 18. März 2016, 20:49

Sirius3 hat geschrieben:@hexflame: das bedeutet, dass in der Zeile davor etwas nicht stimmt, z.B. Klammer vergessen.
Ich finde keinen Fehler.
Apropo, hier ist der Code:

Code: Alles auswählen

from random import choice
from json import dump


def pattern(layer, username):
	room = int(choice('123456'))
	item = int(choice('123456'))
	if room % 3 == 0:
		monster = room / 3
	elif room % 2 == 0:
		monster = room / 2
	else:
		monster = int(choice('1234'))

	file = open('/home/' + username + '/.local/share/save/pattern.file', 'w')
	dump({'room' : room, 'item' : item, 'monster' : monster}, file)
	file.close()
BlackJack

@hexflame: Ich finde da auch keinen Fehler. Und Python findet dort ebenfalls keinen Fehler.

Allerdings ist vier Leerzeichen pro Ebene die konventionelle Einrücktiefe.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

hexflame hat geschrieben:Hier ist die Fehlermeldung

Code: Alles auswählen

    file = open('/home/' + username + '/.local/share/save/pattern.file', 'w')
       ^
SyntaxError: invalid syntax
Könnte es sein, dass im Aufruf der Funktion der Fehler steckt und username leer ist - dann würde die Zeile so aussehen:

Code: Alles auswählen

    file = open('/home/' +  + '/.local/share/save/pattern.file', 'w')
Ich vermute, das wäre ein Syntaxfehler. Du könntest den Aufruf probehalber mal so abändern:

file = open('/home/{0}/.local/share/save/pattern.file'.format(username), 'w')

Oder, eigentlich besser, mit os.path.join(...) den Dateinamen zusammensetzen. Und überhaupt, zumindest zum Testen: setz den Dateinamen vor dem Aufruf von open zusammen und lass ihn ausgeben.
BlackJack

@bb1898: Kann es sein das Du in letzter Zeit zu viel Shell-Programmierung gemacht hast? Egal an was `username` gebunden ist, verschwindet der Name nicht einfach so und hinterlässt einen Syntaxfehler. Python macht da doch keine Textersetzung auf Quelltextebene. Das macht keine vernünftige Programmiersprache. Nicht mal PHP. :twisted:
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

bb1898 hat geschrieben:Könnte es sein, dass im Aufruf der Funktion der Fehler steckt und username leer ist - dann würde die Zeile so aussehen:

Code: Alles auswählen

    file = open('/home/' +  + '/.local/share/save/pattern.file', 'w')
Ich vermute, das wäre ein Syntaxfehler.
Mit Deiner Vermutung liegst Du daneben… :wink: Wenn Du eine Funktion aufrufst und dabei die von ihr erwarteten Argumente nicht übergibst, erhältst Du einen `TypeError`. Bis zur Stelle ``file = …`` gelangst Du also erst gar nicht. Und selbst wenn das, was Du vermutest irgendwie zustande käme, würde an einer Stelle, an der ein nicht definierter Name auftaucht, allenfalls ein `NameError` provoziert werden.

Ein `SyntaxError` taucht nicht auf, weil ein Fehler in der Logik des Codes besteht, sondern weil etwas an der Schreibweise nicht stimmt. Ein Rechtschreibfehler, wenn man so will…
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

mutetella hat geschrieben:Ein `SyntaxError` taucht nicht auf, weil ein Fehler in der Logik des Codes besteht, sondern weil etwas an der Schreibweise nicht stimmt. Ein Rechtschreibfehler, wenn man so will…
Eben. Und weil der Rechtschreibfehler im hier sichtbaren Code nicht zu finden ist, war meine Vermutung, dass er eigentlich nur aus dem übergebenen Parameter 'username' stammen kann. Meine Vorstellung vom übergebenen Leerstring würde allerdings wirklich keinen Syntaxfehler ergeben, das war Quatsch. Da würde dann die Datei nicht gefunden, allenfalls etwas produziert, was kein Dateiname sein kann.

@hexflame: wo wird der Parameter gesetzt? Wird er vom Benutzer eingegeben? Hast Du inzwischen mal probiert, den Dateinamen vor dem open-Aufruf zusammenzusetzen und auszugeben? Außerdem: ganz am Anfang schreibst Du
hexflame hat geschrieben:Dennoch gibt er bei mir an, dass das

Code: Alles auswählen

file = open("/home/" + username + "/.local/share/save/pattern.file","w")
ein `SyntaxError` sei sobald ich es importieren will.
Zeig doch mal, wie dieses Importieren genau aussieht.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@bb1898
Nichts für ungut, aber deine Vermutung bezüglich des `SyntaxError` zeugt von wenig Sachverstand. Wenn man keine Ahnung von einem bestimmten Bereich hat, dann sind wilde Vermutungen als Kommentar eher verwirrend anstatt hilfreich für den Hilfesuchenden. Zumal du bereits darauf hingewiesen wurdest, dass du daneben liegst.

Ein `SyntaxError` kann nur auftreten, wenn der Code beim Durchlaufen des Parsers als fehlerhaft erkannt wird. Auf dieser Stufe spielt die Bedeutung der verschiedenen Bezeichner (z.B. ob sie deklariert wurden) sowie der dahinterstehende Wert überhaupt keine Rolle. Ein Ausdruck bekommt nicht auf magische Weise eine völlig andere Bedeutung, sobald ein "unpassender" Wert dahinter steht. Mal als Vergleich aus der Mathematik: ``x + 1 = 3`` bleibt auf syntaktischer Ebene immer gleich - egal, was für `x` eingesetzt wird.

Falls dir nicht klar ist, was man unter Syntax versteht (auch in Abgrenzung zur Semantik):

https://de.wikipedia.org/wiki/Syntax
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

bb1898 hat geschrieben:Meine Vorstellung vom übergebenen Leerstring würde allerdings wirklich keinen Syntaxfehler ergeben, das war Quatsch.
Hatte ich überlesen. Ändert aber nichts am Rest meines Beitrags.
Antworten