python print end = ''

115

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 *
Hath
quelle
2
Es ist wirklich hilfreich, wenn Sie den Traceback veröffentlichen, um die erhaltene Ausnahme am besten zu diagnostizieren. Der offensichtliche Syntaxfehler ist auf das Fehlen von Anführungszeichen zurückzuführen. Wenn dies behoben wurde, wäre es immer noch ein Syntaxfehler in Python 2, das die Druckfunktion ohne __future__Import nicht hat.
Mike Graham
2
Abgesehen davon sollten Variablen, die nicht vorhanden ClassNamessind, mit einem Kleinbuchstaben beginnen.
Mike Graham
wrt / @Mike, siehe python.org/dev/peps/pep-0008 für die vollständigen Richtlinien für die Benennung und den Codierungsstil von Variablen in Python. Es ist eine gute Idee, sich an die Richtlinien zu halten, da Sie in Python das Privileg haben, mit einer größtenteils konsistenten Bibliothek zu arbeiten, und daher häufig das übliche Ratespiel (z. B. PHP) vermeiden können, selbst wenn Sie mit dem Code anderer Personen arbeiten.
Alan Plum
5
Wenn Sie in Zukunft um Hilfe bei Fehlern, insbesondere bei Syntaxfehlern , bitten , sollten Sie versuchen, den genauen Code anzugeben , den Sie ausgeführt haben , ohne ihn erneut eingeben zu müssen.
Mike Graham
@Mike - Normalerweise würde ich mich nie wieder darum kümmern, es abzutippen, aber ich konnte es nicht, da sich der Code auf einem Remotecomputer befand. Ich werde in Zukunft sicher vorsichtiger sein.
Hath

Antworten:

155

Sind Sie sicher, dass Sie Python 3.x verwenden? Die Syntax ist in Python 2.x nicht verfügbar, da printes sich immer noch um eine Anweisung handelt.

print("foo" % bar, end=" ")

in Python 2.x ist identisch mit

print ("foo" % bar, end=" ")

oder

print "foo" % bar, end=" "

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:

print "foo" % bar,

(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.stdoutdirekt 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:

from __future__ import print_function

Das gleiche gilt für unicode_literalsund einige andere schöne Dinge ( with_statementzum Beispiel). Dies funktioniert jedoch nicht in wirklich alten Versionen (dh die vor Einführung der Funktion erstellt wurden) von Python 2.x.

Alan Plum
quelle
1
Ich habe meine Version mit überprüft dpkg -p pythonund 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.
Mehrad
Denken Sie daran, es gibt einen (subtilen) Unterschied zwischen print foo, barund print (foo, bar)in Python 2. Ersteres ist eine printAussage mit zwei Elementen in der "Argument" -Liste. Letzteres ist eine printAnweisung mit einem einzelnen Tupel in der Argumentliste.
Chepper
Ihr Beispiel print("foo" % bar, end=" ")funktioniert nicht, da bares nicht definiert ist. Was ist barin deinem Beispiel? (Zumindest für mich mit Python 3.7)
Qaswed
50

Wie wäre es damit:

#Only for use in Python 2.6.0a2 and later
from __future__ import print_function

Auf diese Weise können Sie die Python 3.0-Stilfunktion printverwenden, ohne alle Vorkommen von print:) von Hand bearbeiten zu müssen.

badp
quelle
17

In Python 2.7 geht es folgendermaßen vor

mantra = 'Always look on the bright side of life'
for c in mantra: print c,

#output
A l w a y s   l o o k   o n   t h e   b r i g h t   s i d e   o f   l i f e

In Python 3.x.

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 
Ritesh Karwa
quelle
5
Mann, du löst gerade ein Problem, das mich ein paar Tage lang verwirrt. Ich erinnere mich nur an diese Pfeife und die alte Szene, aber nicht an die Lyris, und jetzt finde ich endlich heraus, was dieses Lied ist !!
Sphynx-HenryAY
@ Sphynx-HenryAY glücklich, Ihnen zu helfen Bruder
Ritesh Karwa
In Ihrem zweiten Beispiel scheint h a c k e r es Leerzeichen zwischen den Zeichen zu geben. Ich benutze Python 3.7.3 und bekomme mit überhaupt keine Leerzeichen end=''.
Nagev
@Nagev hat gerade ein Leerzeichen zwischen '' of end = '' gesetzt
Ritesh Karwa
Danke, ich nicht will , den Raum, es ist nur , dass ich dachte , dass ich Ihren Code sah , ohne den Raum noch die Ausgabe beabstandet war, was unvereinbar schien, das ist alles.
Nagev
5

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:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),
Interjay
quelle
Ich bin daran interessiert, so etwas in Python 2 zu machen. Wie würde die Syntax lauten? Was meinst du mit einem Komma?
Rémi
1
@ Rémi Der Code in meiner Antwort ist in Python 2 ... und ich beziehe mich auf das Komma am Ende.
Interjay
4

Ich denke, er verwendet Python 3.0 und Sie verwenden Python 2.6.

Charles Beattie
quelle
1
Guter Punkt! print("foo" % bar, end = " ")löst einen Syntaxfehler in Python 2.6 unter aus, end = " "genau wie das fehlende Zitat :)
badp
3

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:

while i<5:
    print(i)
    i=i+1

Gibt die folgende Ausgabe:

0
1
2
3
4

Wohingegen:

while i<5:
    print(i, end = ' ')
    i=i+1

Wird als Ausgabe geben:

0 1 2 3 4
kdperspective
quelle
Ein Link zur offiziellen Dokumentation von print()könnte hilfreich sein, da dort der Standardwert '\n'für das Argument angezeigt wirdend : docs.python.org/3/library/functions.html#print
Qaswed
Vergessen Sie am Ende kein Leerzeichen wie im obigen Beispiel: "Hacker" Die Ausgabe hier sollte "0 1 2 3 4" sein, mit einem letzten Leerzeichen entsprechend
alant
2

Es sieht so aus, als ob Ihnen nur ein Eröffnungszitat fehlt. Versuchen:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
Will Robinson
quelle
1

Ich denke, der Autor meinte wahrscheinlich:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

Danach fehlt ihm ein erstes Zitat print(.

Beachten Sie, dass ab Python 3.0print eine Funktion im Gegensatz zu einer Anweisung ist. Wenn Sie ältere Versionen von Python verwenden , lautet das Äquivalent:

print "Building internam Index for %d tile(s) ..." % len(inputTiles)

Der endParameter bedeutet, dass die Zeile ' 'am Ende und nicht am Zeilenumbruch steht. Das Äquivalent in früheren Versionen von Python ist:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

(Danke Ignacio).

Dominic Rodger
quelle
1
Das Hinzufügen von a ,am Ende reicht aus.
Ignacio Vazquez-Abrams
1

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:

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

Als ich es mit dem Befehl python lines.pyausführte, bekam ich den folgenden Fehler

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

Wenn ich es mit dem Befehl ausführe, habe python3 lines.pyich es erfolgreich ausgeführt

Subbu
quelle
3
#! / usr / bin / env python3
Mingliang Liu
1

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.

Viraj Patil
quelle
1

Versuchen Sie dies, wenn Sie mit Python 2.7 arbeiten:

from __future__ import print_function
scofield
quelle
Willkommen bei StackOverflow: Wenn Sie Code-, XML- oder Datenbeispiele veröffentlichen, markieren Sie diese Zeilen im Texteditor und klicken Sie auf die Schaltfläche "Codebeispiele" ({}) in der Editor-Symbolleiste oder verwenden Sie Strg + K auf Ihrer Tastatur, um das Format zu optimieren und Syntax heben es hervor!
WhatsThePoint
0

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:

Sie haben mehrere Python-Versionen auf demselben Laufwerk installiert. Und wenn Sie die Taste f5 drücken, wird das Python-Shell-Fenster (Version <3.x) angezeigt

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

Biswajit Paul
quelle
0

Wir müssen vor der Verwendung einen Header importieren end='', da dieser nicht in der normalen Laufzeit des Pythons enthalten ist.

from __future__ import print_function

es soll jetzt perfekt funktionieren

Sukantk
quelle
0

Kompatibel mit beiden Python 2 & 3 :

sys.stdout.write('mytext')

Kompatibel nur mit Python 2

print 'mytext',

Kompatibel nur mit Python 3

print('mytext', end='')
JellicleCat
quelle