Seite 1 von 1

Syntax error:Invalid Syntax

Verfasst: Freitag 19. Dezember 2008, 12:55
von karel2
Hi,ich hab mir gestern Python 3.0 geholt und hab bei Youtube ein paar Tutorials durchgemacht.Jedoch hatte ich überall das selbe Problem:
Ich ging in Python rein--->New Window da tipp ich dann ein
print "Hello World!"
dann speicher ich das und geh dan auf run-->run module
Dann kommt folgender error: Syntax error: Invalid Syntax
Irgendetwas mach ich falsch ich hab es genauso wie im video geschrieben und zeigt jedes mal den Error an.

Verfasst: Freitag 19. Dezember 2008, 12:57
von derdon
In Python 3.0 ist print kein Statement mehr, sondern eine Funktion. http://docs.python.org/3.0/whatsnew/3.0 ... a-function

Verfasst: Freitag 19. Dezember 2008, 13:04
von karel2
Achso,und jetzt kann ich nicht mehr print "Hello world" eingeben oder wie?
Und was soll ich jetzt eintippen das es funzt?
Oder soll ich mir gleich eine ältere Version von Python holen?

Verfasst: Freitag 19. Dezember 2008, 13:06
von DasIch

Code: Alles auswählen

print('Hello World!')

Verfasst: Freitag 19. Dezember 2008, 13:14
von nkoehring
karel2 hat geschrieben:Achso,und jetzt kann ich nicht mehr print "Hello world" eingeben oder wie?
Und was soll ich jetzt eintippen das es funzt?
Oder soll ich mir gleich eine ältere Version von Python holen?
Du koenntest auch einfach dem angebotenen Link folgen und lesen was da steht...

Verfasst: Freitag 19. Dezember 2008, 13:20
von karel2
Gut ok,als Anfänger sollte ich trotzdem auf eine ältere Version umsteigen weil diese möglicherweise nicht so kompliziert wie 3.0 ist oder?

Verfasst: Freitag 19. Dezember 2008, 13:35
von derdon
<ironie>Ja, du hast Recht. Die Pythonentwickler sorgen dafür, dass die Sprache von Version zu Version komplizierter wird, um Anfängern den Einstieg zu erschweren.</ironie>

Verfasst: Freitag 19. Dezember 2008, 14:19
von snafu
Den Aufruf von "print" als Funktion verstehen auch ältere Python-Versionen...

Keine Ahnung, wie sinnvoll es wäre, das zwecks Aufwärtskompatibiltät so zu handhaben. Ich persönlich werde erstmal weiterhin "print" in seiner Form als Statement nutzen. Bis Python 3.0 auf Linux/Unix-Systemen wirklich relevant (im Sinne von "must-have") wird, vergehen ohnehin noch ein paar Jahre.

Verfasst: Freitag 19. Dezember 2008, 14:25
von cofi
snafu hat geschrieben:Den Aufruf von "print" als Funktion verstehen auch ältere Python-Versionen...
Ich bezweifel, dass die alten Versionen print als Funktion verstehen und glaube eher, dass sie den "Parameter" eher als Tupel auffassen - wenn das falsch ist bitte ich um Berichtigung ;)

Es wird noch ne Weile dauern bis Python 3 der Standard ist, aber ich glaube nicht wirklich, dass das "noch ein paar Jahre" sind ;) Es gibt dann bestimmt noch Legacy Code, aber der ist ja - sofern er 2.5+ ist - recht leicht zu portieren.

Verfasst: Freitag 19. Dezember 2008, 14:41
von snafu
Okay, "Funktion" war falsch. Besser wäre "in dieser Form".

Also mein persönlicher Eindruck ist, dass Python 3.0 nicht vor Ende nächsten Jahres in die großen Distributionen integriert ist. Und selbst dann schätze ich, dass die ganzen 2.5er und 2.6er Skripte (mindestens letztere) noch lauffähig sein werden. (Achtung: Gefährliches Halbwissen, verbessert mich im Zweifel mit Fakten).

Naja, vielleicht sollte ich meine kühnen Vermutungen auch manchmal besser für mich behalten. Ich befürchte, es wird hier noch einige Widersprüche in Bezug auf meine Aussagen geben... ^^

Verfasst: Freitag 19. Dezember 2008, 15:04
von DasIch
snafu hat geschrieben:Also mein persönlicher Eindruck ist, dass Python 3.0 nicht vor Ende nächsten Jahres in die großen Distributionen integriert ist.
Ist die Frage was du damit meinst, bei Arch ist Python 3 schon kurz nach dem erscheinen im Repo gelandet. Solltest du allerdings damit meinen dass jedes Skript normalerweise mit Python 3 ausgeführt wird hast du vermutlich recht.

Verfasst: Freitag 19. Dezember 2008, 15:05
von numerix
cofi hat geschrieben:Ich bezweifel, dass die alten Versionen print als Funktion verstehen und glaube eher, dass sie den "Parameter" eher als Tupel auffassen - wenn das falsch ist bitte ich um Berichtigung ;)
Halb falsch.

Richtig ist: print ist keine Funktion in Python 2.x!
Falsch ist: Es wird nicht als Tupel aufgefasst, sondern es sind einfach überflüssige, aber zulässige Klammern, die der Gruppierung dienen.

Edit: Kleiner Nachtrag zur Illustration:

Code: Alles auswählen

In [5]: type(("hallo"))
Out[5]: <type 'str'>

In [7]: type(("hallo",))
Out[7]: <type 'tuple'>

Verfasst: Freitag 19. Dezember 2008, 15:08
von numerix
snafu hat geschrieben:Also mein persönlicher Eindruck ist, dass Python 3.0 nicht vor Ende nächsten Jahres in die großen Distributionen integriert ist. Und selbst dann schätze ich, dass die ganzen 2.5er und 2.6er Skripte (mindestens letztere) noch lauffähig sein werden. (Achtung: Gefährliches Halbwissen, verbessert mich im Zweifel mit Fakten).
Weiß ich nicht. Fakt ist z.B. dass die allerneueste OpenSUSE 11.1 von gestern "nur" Python 2.6 mitbringt.
Fakt ist aber auch, dass es von ActiveState schon eine 3.0 Version gibt, die man distributionsunabhängig in einen beliebigen Ordner installieren kann. Solange man mit der Standardbibliothek (inkl. Tkinter/Tix) auskommt, langt das.

Verfasst: Freitag 19. Dezember 2008, 15:16
von DasIch
numerix hat geschrieben:Falsch ist: Es wird nicht als Tupel aufgefasst, sondern es sind einfach überflüssige, aber zulässige Klammern, die der Gruppierung dienen.
Wenn man nur einen Argument übergibt, tupel gehen aber auch ;)

Verfasst: Freitag 19. Dezember 2008, 15:29
von BlackJack
Um das Problem zu illustrieren:

Code: Alles auswählen

In [379]: name = 'Marc'

In [380]: print('Hallo,', name)
('Hallo,', 'Marc')

In [381]: print 'Hallo,', name
Hallo, Marc

Verfasst: Freitag 19. Dezember 2008, 15:35
von numerix
Und im Vgl. dazu in Python 3.0:

Code: Alles auswählen

>>> name = 'Marc'
>>> print('Hallo,', name)
Hallo, Marc

Verfasst: Freitag 19. Dezember 2008, 18:25
von karel2
Aha naja jetzt hab ich shcon das nächste Problem,ich hab eine Datei gemacht:
print ("GutenTag")
raw_input("Press enter to end")
Dies sollte ja bewirken das das schwarze Fenster dauerhaft dableibt und nicht gleich nach dem Doppelklick verschwindet oder?

Verfasst: Freitag 19. Dezember 2008, 18:39
von Leonidas
karel2 hat geschrieben:Dies sollte ja bewirken das das schwarze Fenster dauerhaft dableibt und nicht gleich nach dem Doppelklick verschwindet oder?
Das ist so oder so eine schlechte Idee. Lies mal in den FAQ den Punkt "wie starte ich Skripte".

Verfasst: Freitag 19. Dezember 2008, 18:45
von numerix
Leonidas hat geschrieben:Lies mal in den FAQ den Punkt "wie starte ich Skripte".
Und am besten auch gleich die ersten paar Seiten des Tutorials zu 3.0, sonst bleibst du dauernd an solchen Sachen hängen.

Oder du benutzt weiter deine Lieblingsdoku zu 2.x und arbeitest nicht mit Python 3.0 ... :wink: