pitón final de impresión =''

2010-03-16 16 views
75

tengo este script en Python, donde tengo que correr gdal_retile.pypitón final de impresión =''

pero me da una excepción en esta línea:

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

El end='' es una sintaxis no válida. Tengo curiosidad sobre por qué, y lo que el autor probablemente quiso hacer.

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


creo que la causa raíz 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 * 
+2

Realmente ayuda si usted fija 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 solucionó, aún sería un error de sintaxis en Python 2, que no tiene la función de impresión sin una importación '__future__'. –

+2

Como estoy a un lado, las variables que no son 'ClassNames' deben comenzar con una letra minúscula. –

+0

wrt/@Mike, consulte http://www.python.org/dev/peps/pep-0008/ para obtener las directrices completas sobre nomenclatura variable y estilo de codificación en Python. Es una buena idea seguir las directrices porque en Python tiene el privilegio de trabajar con una biblioteca mayoritariamente consistente y, por lo tanto, puede evitar el juego de adivinación habitual (por ejemplo, PHP) incluso cuando trabaja con el código de otras personas. –

Respuesta

108

¿Seguro que está utilizando Python 3.x? La sintaxis no está disponible en Python 2.x porque print sigue siendo una declaración.

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

en Python 2.x es idéntica a

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

o

print "foo" % bar, end=" " 

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

Eso es obviamente mala sintaxis (literales no toman argumentos de palabra clave). En Python 3.x print es una función real, por lo que también requiere argumentos de palabras clave.

La expresión correcta 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 más control sobre la salida, considere usar sys.stdout directamente. Esto no hará ninguna magia especial con la salida.

Por supuesto, en versiones recientes de un poco de Python 2.x (2.5 debería tenerlo, no está seguro acerca 2.4), puede utilizar el módulo __future__ de activarlo en el archivo de script:

from __future__ import print_function 

El mismo va con unicode_literals y algunas otras cosas agradables (with_statement, por ejemplo). Sin embargo, esto no funcionará en versiones realmente antiguas (es decir, creadas antes de que se introdujera la característica) de Python 2.x.

+1

Comprobé la versión de mina usando 'dpkg -p python' y 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

+1

simplemente poniendo **, ** al final de la impresión es impresionante ... –

+0

Tenga en cuenta, hay una diferencia (sutil) entre 'imprimir foo, bar' y 'imprimir (foo, bar)' en Python 2. former es una declaración 'print' con dos elementos en su lista de" argumentos "; el último es una instrucción 'print' con una sola tupla en su lista de argumentos. – chepner

38

¿Qué tal esto:

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

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

1

creo que el autor probablemente significaba:

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

Se está perdiendo un presupuesto inicial después de print(.

nota de que al Python 3.0, print es una función en lugar de una declaración, si está utilizando versiones más antiguas de Python el equivalente sería:

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

El parámetro end significa que la línea se hace ' ' 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).

+1

Agregar un ',' al final lo hará. –

2

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

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

Creo que está usando Python 3.0 y está usando Python 2.6.

+1

¡Buen punto! 'print (" foo "% bar, end =" ")' desencadena un error de sintaxis en Python 2.6 bajo 'end =" "' al igual que la cita faltante :) – badp

5

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

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

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

Estoy interesado en hacer algo como esto en python 2 ¿cuál sería la sintaxis? ¿Qué quieres decir con agregar una coma? –

+1

@ Rémi El código en mi respuesta está en Python 2 ... Y me refiero a la coma al final. – interjay

0

Incluso yo estaba recibiendo ese mismo error hoy. Y he experimentado algo interesante. Si está utilizando 3.x pitón y sigue recibiendo el error, podría ser una razón:

tiene varias versiones instaladas en pitón misma unidad. Y cuando que estés presing el botón f5 la ventana Python Shell (de ver. < 3.x) aparece

que estaba recibiendo el mismo error hoy en día, y se dio cuenta de que algo. resultados satisfactorios Confía en mí, cuando yo haga mi código desde la ventana del caparazón (de ver. 3.x), tengo

0

USO :: python3 filename.py

me había dicho error, esto ocurrió porque tengo dos versiones de python instaladas en mi disco son python2.7 y python3. siguiente fue mi código:

#!usr/bin/python 

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

cuando lo funciono con el comando python lines.py me dieron el siguiente error

#!usr/bin/python 

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

cuando lo ejecuto por el comando python3 lines.py que se ha ejecutado correctamente

+1

#!/Usr/bin/env python3 –

0

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

from __future__ import print_function 

deberá funcionar perfectamente ahora

0

Esta es sólo una cosa de la 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 instrucción en lugar de un nuevo carácter de línea. En Python 2.x, debe hacer esto colocando una coma al final de la instrucción de impresión.

Por ejemplo, cuando en un entorno Python 3.x:

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

dará la siguiente salida:

0 
1 
2 
3 
4 

Donde como:

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

dará como salida :

0 1 2 3 4 
7

en Python 2.7 aquí es la forma de hacerlo

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 3.x pitón

myjob= 'hacker' 
for c in myjob: print (c, end='') 
#output 
h a c k e r 
+0

Hombre, usted acaba de resolver un problema confundiéndome por un par de días, solo recuerdo esos silbidos y escenas del pasado pero no los lyris, ¡y ahora finalmente descubro cuál es esa canción! ! –

+0

@ Sphynx-HenryAY feliz de ayudarlo hermano –

1

para Python 2.7 Yo tenía el mismo problema Sólo tiene que utilizar "de __future__ import print_function "sin comillas para resolver este problema. Esto asegura que Python 2.6 y posteriores Python 2.x pueden usar la función de impresión Python 3.x.

1

prueba este si está trabajando con Python 2.7:

from __future__ import print_function 
+0

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 el editor barra de herramientas o usando Ctrl + K en su teclado para formatear y sintaxis y resaltarlo! – WhatsThePoint

Cuestiones relacionadas