Seite 1 von 1

SyntaxError: invalid syntax

Verfasst: Donnerstag 7. Dezember 2017, 18:40
von michi-monster
Halli, ich bin Anfänger, habe bisher nur mit HTML / CSS gearbeitet. Nun habe ich zur Übung ein Script abgeschrieben und bekomme einen Fehler.

Code: Alles auswählen

michi@sys-hier-in-kiel ~ $ python3
Python 3.5.4 (default, Dec  5 2017, 16:48:10) 
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str = "this is string example....wow!!! this is really string"
>>> print str.replace("is", "was")
  File "<stdin>", line 1
    print str.replace("is", "was")
            ^
SyntaxError: invalid syntax
>>> print str.replace("is", "was")
  File "<stdin>", line 1
    print str.replace("is", "was")
            ^
SyntaxError: invalid syntax
>>> print str.replace("is", "was")
  File "<stdin>", line 1
    print str.replace("is", "was")
            ^
SyntaxError: invalid syntax
>>> print str.replace             
  File "<stdin>", line 1
    print str.replace
            ^
SyntaxError: Missing parentheses in call to 'print'
>>> print str.replace("is")
  File "<stdin>", line 1
    print str.replace("is")
            ^
SyntaxError: invalid syntax
>>> str = "test"
>>> print str.replace("is")
  File "<stdin>", line 1
    print str.replace("is")
Das Script ist von der Seite https://www.tutorialspoint.com/python/s ... eplace.htm
Example

The following example shows the usage of replace() method.

#!/usr/bin/python

str = "this is string example....wow!!! this is really string"
print str.replace("is", "was")
print str.replace("is", "was", 3)

Ich verwende Python3. Soweit ich das sehe ist der Code doch Phyton3 (?) . Ist ein Fehler im Code den ich übersehen habe? Oder was kann die Ursache sein?

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 7. Dezember 2017, 18:43
von __deets__
Nein. Das ist Python 2. Du solltest dir explizit ein Tutorial für Python 3 suchen - zb das offizielle von Python.org.

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 7. Dezember 2017, 19:33
von michi-monster
ok. Vielen Dank. Noch eine Frage: ich will ein einfaches Suchen / Ersetzen machen. Die Datei liegt in .txt oder .html vor. Auf meiner Suche habe ich das find and replace gefunden. Damit komme ich noch nicht weiter. Leider sind die neueren Anleitungen (eben Python3) meist nur auf englisch. Ich kann zwar englisch, aber Deutsch ist schöner.
Gibt es eine andere Möglichkeit als das find and replace?

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 7. Dezember 2017, 23:13
von Sirius3
@michi-monster: was meinst Du mit `find`? Und wohin willst Du weiter kommen? Was gefällt Dir an `replace` nicht?

Re: SyntaxError: invalid syntax

Verfasst: Freitag 8. Dezember 2017, 09:29
von michi-monster
Es heisst dann search and replace - nicht find and replace.
Ich komme nicht weiter, da ich einen string Fehler bekomme:

Code: Alles auswählen

[michi@sys-hier-in-kiel ~ $ python3
Python 3.5.4 (default, Dec  5 2017, 16:48:10) 
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> str="das ist ein Beispiel: sc soll ersetzt werden"
>>> print str.replace("sc","fM")
  File "<stdin>", line 1
    print str.replace("sc","fM")
            ^
SyntaxError: invalid syntax
>>> 
Vielleicht ist das ja auch wieder Python2. Ich habe gelesen dass ein Unterschied zwischen den Versionen vor Allem im Klammerbereich liegen. Gibt es einen einfachen Tipp wie ich erkenne ob es Python2 oder Python3 ist?

Re: SyntaxError: invalid syntax

Verfasst: Freitag 8. Dezember 2017, 10:03
von __deets__
Ja, das ist Python 2 Code. Schon wieder. Ein wichtiger Unterschied sind print statements. In Python 2 schreibt man die ohne Klammern. In Python 3 zwingend mit, weil es eine Funktion geworden ist.

Hier findet sich eine Übersicht

http://sebastianraschka.com/Articles/se ... _diff.html

Re: SyntaxError: invalid syntax

Verfasst: Freitag 8. Dezember 2017, 13:03
von noisefloor
Hallo,

es ist auch überhaupt keine gute Idee, die Variable `str` zu nehmen - weil du damit die Build-In Funktion `str` überschreibst, was ungewollte Nebeneffekte haben kann.

Gruß, noisefloor

Re: SyntaxError: invalid syntax

Verfasst: Freitag 8. Dezember 2017, 18:18
von michi-monster
Ich bin jetzt mal so weit, dass ein Suchen / Ersetzen von einer Stringfolge her funktioniert.

Code: Alles auswählen

[michi@sys-hier-in-kiel ~ $ python3
Python 3.5.4 (default, Dec  5 2017, 16:48:10) 
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> mystring = "Rnd 12: (sc in the next 5 st, inc) repeat 5 times, sc in the next 6 st [41]"
>>> print(mystring.replace("sc","fM"))
Rnd 12: (fM in the next 5 st, inc) repeat 5 times, fM in the next 6 st [41]
>>> 
Ich möchte Aber mehrere Sachen ersetzen. So soll ausser dem zum Beispiel noch die Abkürzung st ersetzt werden. Ich kann es natürlich alles manuell eingeben. Aber da bin ich ja so wie bei OpenOffice im einfachen Suchen/Ersetzen ...
Wie kann ich es hinbekommen mehrere Sachen / Abkürzungen zu ersetzen?

Re: SyntaxError: invalid syntax

Verfasst: Freitag 8. Dezember 2017, 19:20
von __deets__
Entweder durch kopieren und anpassen, oder durch eine Schleife über Ersetzungen. Dafür lohnt das durcharbeiten eines Tutorials.

Re: SyntaxError: invalid syntax

Verfasst: Samstag 9. Dezember 2017, 20:48
von michi-monster
so, ich habe auf meinem System das Python 2 jetzt auch mit drauf. Komme in einer Sache nicht weiter:

Code: Alles auswählen

>>> translation_table = {
...     "ch": "LM",
...     "dc": "Stb",
...     "hdc": "halbes Staebchen",
...     "dtr": "dreier-Staebchen",}
>>> teststring = """sc wird in hdc oder ch"""
>>> print(teststring.translate(str.maketrans(translation_table)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: string keys in translate table must be of length 1
>>> 
Wo liegt der Fehler?

Re: SyntaxError: invalid syntax

Verfasst: Samstag 9. Dezember 2017, 20:57
von Sirius3
@michi-monster: der Fehler liegt darin, dass Du glaubst, `translate` wäre die richtige Methode für Dein Problem. Wie es richtig geht, hat __deets__ ja schon geschrieben.

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 08:46
von michi-monster
@Sirus: ich lerne erstmal nur. Die Priorität liegt nicht im Projekt. Die Eingabe ist eine Kopie aus einem Turoturial. Sollte so ja theoretisch funktionieren. Ich weiss nicht, warum ich da einen Fehler bekomme.

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 09:25
von noisefloor
Hallo,

`translate` funktioniert nicht, weil du es mit den falschen Parametern benutzt. Was letztendlich auch egal ist, weil `replace` schon dir richtige Methode ist. Der Wechsel von Python 3 auf 2 ist auch keine Lösung.

Wenn du mehrfach ersetzen willst, musst du halt `replace` mehrfach anwenden. Um bei deiner Analogie zu bleiben: wenn du in OpenOffice mehrere Begriff ersetzen willst, dann musst du doch auch mehrfach Suchen&Ersetzen, das geht auch nicht in einem Rutsch.

Programmieren ist nicht raten. Es hilft, die Doku zu den Methoden zu lesen und zu versuchen zu verstehen, was da läuft. Wenn Fragen auftauchen oder das Ergebnis nicht das erwartet ist -> hier posten und dabei das konkrete Verständnisproblem bzw. den Fehlerhaften Code und das erwartete Ergebnis beschreiben.

Gruß, noisefloor

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 11:28
von Sirius3
@michi-monster: nein, das ist keine Kopie aus einem Tutorial, denn da wurde `translate` sicher nicht so benutzt. Du versuchst etwas, das Du gefunden hast, auf Deine Bedürfnisse anzupassen, was aber nur geht, wenn man verstanden hat, was der ursprüngliche Code macht. `translate` übersetzt Zeichen in Zeichen und nicht Strings zu Strings. `translate` ist schwierig zu verwenden und schwer zu verstehen und es gibt selten einen realen Anwendungsfall. Warum das ein Tutorial für Einsteiger überhaupt behandelt, ist mir unverständlich.

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 12:15
von snafu
michi-monster hat geschrieben:Wo liegt der Fehler?
string keys in translate table must be of length 1
Ist dir klar, was das bedeutet?

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 12:26
von michi-monster
Nein. Eben nicht. :K Ich habe geschaut und soweit ich verstanden habe ist der String in meinem Fall leer bzw. auf 0 gesetzt. :?:
Ob und was ich dann ändern kann / soll, weiss ich nicht.

Re: SyntaxError: invalid syntax

Verfasst: Sonntag 10. Dezember 2017, 12:30
von __deets__
Translate übersetzt EINEN BUCHSTABEN in EINEN ANDEREN BUCHSTABEN. Nicht ein Wort oder genereller ZeichenKETTE in eine beliebige andere ZeichenKETTE.

Es geht also nicht für dein nutzungsszsenario. Du musst schon n mal hintereinander mit replace arbeiten.