python - tutorial - the django project
Llamadas de entrada compatibles con versiones anteriores en Python (4)
Dado que la versión Python 2.x de input()
es esencialmente inútil, simplemente puede sobrescribirla mediante raw_input
:
try:
input = raw_input
except NameError:
pass
En general, no trataría de apuntar al código que funciona con Python 2.xy 3.x, sino que escribo su código de manera que funcione en 2.x y obtenga una versión de trabajo de 3.x de utilizando el script 2to3
.
Me preguntaba si alguien tiene sugerencias para escribir una llamada input () compatible con versiones anteriores para recuperar un filepath?
En Python 2.x, raw_input funcionó bien para entradas como / path / to / file. El uso de la entrada funciona bien en este caso para 3.x, pero se queja en 2.x debido al comportamiento eval.
Una solución es verificar la versión de Python y, en función de la versión, asignar una input
o una input
raw_input
a una nueva función:
if sys.version_info[0] >= 3:
get_input = input
else:
get_input = raw_input
Estoy seguro de que hay una mejor manera de hacer esto sin embargo. ¿Alguien tiene alguna sugerencia?
Este código se enseña en muchos programas de educación y capacitación de Python ahora.
Generalmente se enseñan juntos:
from __future__ import print_function
if hasattr(__builtins__, ''raw_input''):
input = raw_input
Primera línea: importa la función print()
Python 3.x a Python 2.7, por lo que print()
comporta de la misma manera en ambas versiones de Python. Si esto rompe su código debido a una print "some content"
más antigua de print "some content"
llamadas de print "some content"
, puede dejar esta línea desactivada.
Segunda y tercera líneas: establece Python 2.7 raw_input()
en input()
para que input()
se pueda usar en ambas versiones de Python sin problemas. Esto se puede usar solo si es la única solución de compatibilidad que desea incluir en su código.
Hay más from __future__
importaciones de from __future__
disponibles en el sitio de Python.org para otros problemas de compatibilidad de idiomas. También hay una biblioteca llamada "seis" que puede buscar soluciones de compatibilidad cuando se trata de otros problemas.
La forma en que lo manejas está bien. Probablemente haya formas más similares de usar el módulo sys
, pero teniendo en cuenta que si usted es un programa está haciendo algo más que trivial con cadenas y archivos, es mejor tener dos versiones de su programa en lugar de tener un python compatible con versiones anteriores programa.
Mi preferencia es importar la función:
from builtins import input
Aunque, tendrás que instalar la dependencia:
pip install future
Desafortunadamente, esta dependencia no será notada por la herramienta pipreqs
. Por lo tanto, si está creando los requirements.txt
archivos .txt, tendrá que agregar la biblioteca futura manualmente.