SyntaxError: invalid syntax

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
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Das ist Python 2. Du solltest dir explizit ein Tutorial für Python 3 suchen - zb das offizielle von Python.org.
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@michi-monster: was meinst Du mit `find`? Und wohin willst Du weiter kommen? Was gefällt Dir an `replace` nicht?
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Entweder durch kopieren und anpassen, oder durch eine Schleife über Ersetzungen. Dafür lohnt das durcharbeiten eines Tutorials.
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

@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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

michi-monster hat geschrieben:Wo liegt der Fehler?
string keys in translate table must be of length 1
Ist dir klar, was das bedeutet?
Benutzeravatar
michi-monster
User
Beiträge: 48
Registriert: Donnerstag 7. Dezember 2017, 18:30
Kontaktdaten:

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.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten