2010-06-14 6 views
5

Estoy usando la nueva impresión de Python 3.x y observé que el siguiente código no compila debido al end=' '.¿Cómo escribir un script de Python 2.6+ que fracasa correctamente con Python anterior?

from __future__ import print_function 

import sys 
if sys.hexversion < 0x02060000: 
    raise Exception("py too old") 

... 
print("x",end=" ") # fails to compile with py24 

¿Cómo puedo continuar usando la nueva sintaxis pero hacer que la secuencia de comandos falle muy bien? ¿Es obligatorio llamar a otro script y utilizar solo la sintaxis segura en este?

+2

Si pudiéramos enviar a un hombre atrás en el tiempo, podríamos convencer a Guido de que agregue un buen pragma "__minimum_python_version __ (2,0)" –

Respuesta

2

Existen algunas sugerencias en este question here, pero parece que no es posible. Deberá crear un script de envoltura.

2

Una forma es escribir su módulo utilizando la declaración de impresión de python 2.x, y luego cuando desea convertirlo en python 3, utilice la secuencia de comandos 2to3. Creo que también hay scripts para la conversión 3to2, aunque parecen ser menos maduros que 2to3.

De cualquier manera, en los scripts de biggers, siempre debe separar la lógica de dominio y la entrada/salida; De esta manera, todas las declaraciones/funciones de impresión se agrupan en un solo archivo. Para el registro, debe usar el módulo de registro.

+2

La idea es escribir código listo para Python 3 que funcione con 2.6+ python no planea cambiar en el futuro – sorin

8

El método fácil para Python 2.6 es sólo para agregar una línea como:

b'You need Python 2.6 or later.' 

al inicio del archivo. Esto explota el hecho de que los literales de bytes se introdujeron en 2.6 y, por lo tanto, cualquier versión anterior aumentará un SyntaxError con cualquier mensaje que escriba dado como el seguimiento de la pila.

Cuestiones relacionadas