final de impresión de python = ''

115

Tengo este script de Python donde necesito ejecutar gdal_retile.py

pero obtengo una excepción en esta línea:

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

La end=''sintaxis no es válida. Tengo curiosidad por saber por qué y lo que probablemente pretendía hacer el autor.

Soy nuevo en Python si aún no lo has adivinado.


Creo que la causa principal del problema es que estas importaciones están fallando y, por lo tanto, uno debe contener esta importación. 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 *
Tiene
fuente
2
Realmente ayuda si publica el rastreo para diagnosticar mejor la excepción que recibe. El error de sintaxis obvio se debe a la falta de comillas de apertura. Si eso se corrigiera, aún sería un error de sintaxis en Python 2, que no tiene la función de impresión sin una __future__importación.
Mike Graham
2
Aparte de eso, las variables que no lo son ClassNamesdeben comenzar con una letra minúscula.
Mike Graham
wrt / @Mike, consulte python.org/dev/peps/pep-0008 para conocer las pautas completas para la denominación de variables y el estilo de codificación en Python. Es una buena idea adherirse a las pautas porque en Python tiene el privilegio de trabajar con una biblioteca mayormente consistente y, por lo tanto, a menudo puede evitar el juego de adivinanzas habitual (por ejemplo, PHP) incluso cuando está trabajando con el código de otras personas.
Alan Plum
5
Cuando solicite ayuda con errores en el futuro, especialmente errores de sintaxis , debe intentar proporcionar el código exacto que ha intentado ejecutar , sin volver a escribir.
Mike Graham
@ Mike: por lo general, nunca me molestaría en escribirlo nuevamente, sin embargo, no pude hacerlo porque el código estaba en una computadora remota. Me aseguraré de tener más cuidado en el futuro.
¿Ha

Respuestas:

155

¿Estás seguro de que estás usando Python 3.x? La sintaxis no está disponible en Python 2.x porque printsigue siendo una declaración.

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

en Python 2.x es idéntico a

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

o

print "foo" % bar, end=" "

es decir, como una llamada a imprimir con una tupla como argumento.

Obviamente, esa es una mala sintaxis (los literales no aceptan argumentos de palabras clave). En Python 3.x printes una función real, por lo que también toma argumentos de palabras clave.

El modismo correcto en Python 2.x para end=" " es:

print "foo" % bar,

(tenga en cuenta la coma final, esto hace que termine la línea con un espacio en lugar de un salto de línea)

Si desea tener más control sobre la salida, considere usar sys.stdout directamente. Esto no hará ninguna magia especial con la salida.

Por supuesto, en versiones algo recientes de Python 2.x (2.5 debería tenerlo, no estoy seguro acerca de 2.4), puede usar el __future__módulo para habilitarlo en su archivo de script:

from __future__ import print_function

Lo mismo ocurre con unicode_literalsy algunas otras cosas agradables ( with_statementpor ejemplo). Sin embargo, esto no funcionará en versiones realmente antiguas (es decir, creadas antes de que se introdujera la función) de Python 2.x.

Alan Plum
fuente
1
Verifiqué la versión mía usando dpkg -p pythony era la versión 2.xx.xx. Muchas gracias, apliqué la sugerencia para ponerlo en forma de print "foo" %bar, y funcionó perfectamente bien.
Mehrad
Tenga en cuenta que hay una diferencia (sutil) entre print foo, bary print (foo, bar)en Python 2. La primera es una printdeclaración con dos elementos en su lista de "argumentos"; la última es una printdeclaración con una sola tupla en su lista de argumentos.
chepner
Su ejemplo print("foo" % bar, end=" ")no funcionará, ya barque no está definido; entonces, ¿qué hay baren tu ejemplo? (Al menos para mí con Python 3.7)
Qaswed
50

Qué tal esto:

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

Esto le permite utilizar la printfunción de estilo Python 3.0 sin tener que editar manualmente todas las apariciones de print:)

badp
fuente
17

En Python 2.7, así es como se hace

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

En Python 3.x

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 
Ritesh Karwa
fuente
5
Hombre, acabas de resolver un problema confundiéndome durante un par de días, solo recuerdo ese silbido y la escena de los viejos tiempos, pero no la lyris, ¡¡y ahora finalmente descubro cuál es esa canción !!
Sphynx-HenryAY
@ Sphynx-HenryAY feliz de ayudarte hermano
Ritesh Karwa
En su segundo ejemplo, parece que h a c k e r tiene espacios entre caracteres. Estoy usando Python 3.7.3 y no obtengo ningún espacio con end=''.
Nagev
@Nagev acaba de poner un espacio entre '' of end = ''
Ritesh Karwa
Gracias, no quiero el espacio, es solo que pensé que vi tu código sin el espacio pero la salida estaba espaciada, lo que parecía inconsistente, eso es todo.
Nagev
5

En primer lugar, le falta una cita al principio, pero probablemente se trate de un error de copiar / pegar.

En Python 3.x, la end=' 'parte colocará un espacio después de la cadena mostrada en lugar de una nueva línea. Para hacer lo mismo en Python 2.x, pondría una coma al final:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),
interjay
fuente
Estoy interesado en hacer algo como esto en Python 2, ¿cuál sería la sintaxis? ¿A qué te refieres con agregar una coma?
Rémi
1
@ Rémi El código en mi respuesta está en Python 2 ... Y me refiero a la coma al final.
Interjay
4

Creo que está usando Python 3.0 y tú estás usando Python 2.6.

Charles Beattie
fuente
1
¡Buen punto! print("foo" % bar, end = " ")desencadena un error de sintaxis en Python 2.6 end = " "al igual que lo hace la cita que falta :)
badp
3

Esto es solo una versión. Desde Python 3.x, la impresión es en realidad una función, por lo que ahora toma argumentos como cualquier función normal.

El end=' 'es solo para decir que desea un espacio después del final de la declaración en lugar de un carácter de nueva línea. En Python 2.x, tendría que hacer esto colocando una coma al final de la declaración de impresión.

Por ejemplo, en un entorno Python 3.x:

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

Dará el siguiente resultado:

0
1
2
3
4

Donde como:

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

Dará como salida:

0 1 2 3 4
kdperspectiva
fuente
Un enlace a la documentación oficial de print()podría ser útil, ya que allí se puede ver el valor predeterminado '\n'del argumento end: docs.python.org/3/library/functions.html#print
Qaswed
No olvide un espacio al final como el ejemplo anterior: "hacker" la salida aquí debería ser "0 1 2 3 4" con un último espacio correspondientemente
alant
2

Parece que le falta una comilla doble de apertura. Tratar:

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

Creo que el autor probablemente quiso decir:

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

Le falta una cita inicial después print(.

Tenga en cuenta que a partir de Python 3.0 , printes una función en lugar de una declaración, si está utilizando versiones anteriores de Python, el equivalente sería:

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

El endparámetro significa que la línea llega ' 'al final en lugar de un carácter de nueva línea. El equivalente en versiones anteriores de Python es:

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

(gracias Ignacio).

Dominic Rodger
fuente
1
Agregar un ,al final lo hará.
Ignacio Vazquez-Abrams
1

UTILIZAR :: python3 filename.py

Tuve tal error, esto ocurrió porque tengo dos versiones de python instaladas en mi disco, a saber, python2.7 y python3. A continuación estaba mi código:

#!usr/bin/python

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

cuando lo ejecuto con el comando python lines.py, obtengo el siguiente error

#!usr/bin/python

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

cuando lo ejecuto con el comando python3 lines.pyque ejecuté con éxito

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

Para python 2.7 tuve el mismo problema. Simplemente use " from __future__ import print_function " sin comillas para resolver este problema. Esto garantiza que Python 2.6 y posteriores Python 2.x puedan usar la función de impresión Python 3.x.

Viraj Patil
fuente
1

Pruebe este si está trabajando con python 2.7:

from __future__ import print_function
scofield
fuente
Bienvenido a StackOverflow: si publica código, XML o muestras de datos, resalte esas líneas en el editor de texto y haga clic en el botón "muestras de código" ({}) en la barra de herramientas del editor o use Ctrl + K en su teclado para formatear bien y la sintaxis lo resalta!
WhatsThePoint
0

Incluso yo estaba recibiendo el mismo error hoy. Y he experimentado algo interesante. Si está usando Python 3.xy sigue recibiendo el error, podría ser una razón:

Tiene varias versiones de Python instaladas en la misma unidad. Y cuando presiona el botón f5, aparece la ventana del shell de Python (de la versión <3.x)

Recibí el mismo error hoy y noté esa cosa. Créame, cuando ejecuto mi código desde la ventana de shell adecuada (de la versión 3.x), obtengo resultados satisfactorios

Biswajit Paul
fuente
0

necesitamos importar un encabezado antes de usarlo end='', ya que no está incluido en el tiempo de ejecución normal de Python.

from __future__ import print_function

funcionará perfectamente ahora

Sukantk
fuente
0

Compatible con tanto Python 2 y 3 :

sys.stdout.write('mytext')

Compatible solo con Python 2

print 'mytext',

Compatible solo con Python 3

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