Ich habe dieses Python-Skript, wo ich ausführen muss gdal_retile.py
aber ich bekomme eine Ausnahme in dieser Zeile:
if Verbose:
print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
Die end=''
Syntax ist ungültig. Ich bin gespannt, warum und was der Autor wahrscheinlich vorhatte.
Ich bin neu in Python, wenn Sie es noch nicht erraten haben.
Ich denke, die Hauptursache des Problems ist, dass diese Importe fehlschlagen und man diesen Import daher enthalten muss from __future__ import print_function
try:
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from osgeo.gdalconst import *
except:
import gdal
import ogr
import osr
from gdalconst import *
__future__
Import nicht hat.ClassNames
sind, mit einem Kleinbuchstaben beginnen.Antworten:
Sind Sie sicher, dass Sie Python 3.x verwenden? Die Syntax ist in Python 2.x nicht verfügbar, da
print
es sich immer noch um eine Anweisung handelt.in Python 2.x ist identisch mit
oder
dh als Aufruf zum Drucken mit einem Tupel als Argument.
Das ist offensichtlich eine schlechte Syntax (Literale akzeptieren keine Schlüsselwortargumente). In Python 3.x.
print
eine tatsächliche Funktion, daher werden auch Schlüsselwortargumente verwendet.Die korrekte Redewendung in Python 2.x
end=" "
lautet:(Beachten Sie das letzte Komma. Dadurch wird die Zeile eher mit einem Leerzeichen als mit einem Zeilenumbruch beendet.)
Wenn Sie mehr Kontrolle über die Ausgabe wünschen, sollten Sie diese
sys.stdout
direkt verwenden. Dies wird keine besondere Magie mit der Ausgabe machen.Natürlich können Sie in etwas neueren Versionen von Python 2.x (2.5 sollte es haben, nicht sicher über 2.4) das
__future__
Modul verwenden, um es in Ihrer Skriptdatei zu aktivieren:Das gleiche gilt für
unicode_literals
und einige andere schöne Dinge (with_statement
zum Beispiel). Dies funktioniert jedoch nicht in wirklich alten Versionen (dh die vor Einführung der Funktion erstellt wurden) von Python 2.x.quelle
dpkg -p python
und es war Version 2.xx.xx. Vielen Dank, ich habe den Vorschlag angewendet, ihn in die Form zu bringen,print "foo" %bar,
und er hat einwandfrei funktioniert.print foo, bar
undprint (foo, bar)
in Python 2. Ersteres ist eineprint
Aussage mit zwei Elementen in der "Argument" -Liste. Letzteres ist eineprint
Anweisung mit einem einzelnen Tupel in der Argumentliste.print("foo" % bar, end=" ")
funktioniert nicht, dabar
es nicht definiert ist. Was istbar
in deinem Beispiel? (Zumindest für mich mit Python 3.7)Wie wäre es damit:
Auf diese Weise können Sie die Python 3.0-Stilfunktion
print
verwenden, ohne alle Vorkommen vonprint
:) von Hand bearbeiten zu müssen.quelle
In Python 2.7 geht es folgendermaßen vor
In Python 3.x.
quelle
h a c k e r
es Leerzeichen zwischen den Zeichen zu geben. Ich benutze Python 3.7.3 und bekomme mit überhaupt keine Leerzeichenend=''
.Zunächst fehlt Ihnen am Anfang ein Zitat, aber dies ist wahrscheinlich ein Fehler beim Kopieren / Einfügen.
In Python 3.x wird der
end=' '
Teil anstelle einer neuen Zeile ein Leerzeichen nach der angezeigten Zeichenfolge setzen. Um dasselbe in Python 2.x zu tun, setzen Sie am Ende ein Komma:quelle
Ich denke, er verwendet Python 3.0 und Sie verwenden Python 2.6.
quelle
print("foo" % bar, end = " ")
löst einen Syntaxfehler in Python 2.6 unter aus,end = " "
genau wie das fehlende Zitat :)Dies ist nur eine Versionssache. Seit Python 3.x ist der Druck tatsächlich eine Funktion, daher werden jetzt Argumente wie bei jeder normalen Funktion verwendet.
Das
end=' '
heißt nur, dass Sie nach dem Ende der Anweisung ein Leerzeichen anstelle eines neuen Zeilenzeichens möchten. In Python 2.x müssten Sie dazu ein Komma am Ende der print-Anweisung setzen.Zum Beispiel in einer Python 3.x-Umgebung:
Gibt die folgende Ausgabe:
Wohingegen:
Wird als Ausgabe geben:
quelle
print()
könnte hilfreich sein, da dort der Standardwert'\n'
für das Argument angezeigt wirdend
: docs.python.org/3/library/functions.html#printEs sieht so aus, als ob Ihnen nur ein Eröffnungszitat fehlt. Versuchen:
quelle
Ich denke, der Autor meinte wahrscheinlich:
Danach fehlt ihm ein erstes Zitat
print(
.Beachten Sie, dass ab Python 3.0
print
eine Funktion im Gegensatz zu einer Anweisung ist. Wenn Sie ältere Versionen von Python verwenden , lautet das Äquivalent:Der
end
Parameter bedeutet, dass die Zeile' '
am Ende und nicht am Zeilenumbruch steht. Das Äquivalent in früheren Versionen von Python ist:(Danke Ignacio).
quelle
,
am Ende reicht aus.VERWENDEN ::
python3 filename.py
Ich hatte einen solchen Fehler, der auftrat, weil ich zwei Versionen von Python auf meinem Laufwerk installiert habe, nämlich Python2.7 und Python3. Folgendes war mein Code:
Als ich es mit dem Befehl
python lines.py
ausführte, bekam ich den folgenden FehlerWenn ich es mit dem Befehl ausführe, habe
python3 lines.py
ich es erfolgreich ausgeführtquelle
Für Python 2.7 hatte ich das gleiche Problem. Verwenden Sie einfach " from __future__ import print_function " ohne Anführungszeichen, um dieses Problem zu beheben. Dadurch wird sichergestellt, dass Python 2.6 und höher Python 2.x die Druckfunktion Python 3.x verwenden kann.
quelle
Versuchen Sie dies, wenn Sie mit Python 2.7 arbeiten:
quelle
Sogar ich habe heute den gleichen Fehler bekommen. Und ich habe eine interessante Sache erlebt. Wenn Sie Python 3.x verwenden und dennoch den Fehler erhalten, kann dies ein Grund sein:
Ich habe heute den gleichen Fehler bekommen und das Ding bemerkt. Vertrauen Sie mir, wenn ich meinen Code über das richtige Shell-Fenster (Version 3.x) ausführe, habe ich zufriedenstellende Ergebnisse erzielt
quelle
Wir müssen vor der Verwendung einen Header importieren
end=''
, da dieser nicht in der normalen Laufzeit des Pythons enthalten ist.es soll jetzt perfekt funktionieren
quelle
Kompatibel mit beiden Python 2 & 3 :
Kompatibel nur mit Python 2
Kompatibel nur mit Python 3
quelle