intive Argentina Blog

Discusiones con defensores de Python2

Durante el tiempo que estuve programando Python, nunca tuve dudas de que la mejor versión para empezar un proyecto era Python3. En parte, porque fue la primera versión en la que aprendí a codear, y en (otra) parte por cierto preconcepto de que lo nuevo es mejor. Más allá de mi preferencia, de todas formas, me encontré con que mucha gente todavía prefería Python2, lo que me llevó a muchas discusiones de por qué usar uno u otro. Tantas de hecho, que decidí replicar una típica conversación sobre el asunto.

– Ok, para vos, entonces, si tengo que decir ya, ¿cuál uso?

– Python3, sin mas vueltas.

– Pero ¿por ninguna razón  me convendría usar Python2?

– Casi. Dos o tres cosas pueden llegar a ser más fáciles pero, fuera de eso, Python3 es mejor.

– ¿Qué cosas?

– Cosas relacionadas con procesar texto a bajo nivel. Python2 no tiene una división muy estricta entre qué es un texto y qué un dato binario, en parte porque la infraestructura para procesar texto no tiene la misma base de Unicode que Python3, así que manejar texto a bajo nivel tiene ciertas facilidades.

– Ok.  Yo tengo que hacer eso en mi app, entonces, ¿debería usar Python2!

– No exactamente, especialmente porque python 2 tiene y tendrá estos problemas:

  • No sabe hacer bien encoding y decoding de Unicode:

  • No puede usar caracteres especiales de forma consistente en el sistema, por ejemplo:

  •  Tiene problemas para separar variables locales de globales en las iteraciones:

  •  Tiene problemas para abrir archivos no ASCII como binarios en sistemas no POSIX.
  • No maneja bien las excepciones, menos las que pasan simultáneamente:

– También tiene otros problemas menos importantes

– Pero esos son bugs, y los van a solucionar en la próxima versión de Python, ¿no?

– Lo hicieron, en Python3. El tema es que solucionar esos bugs implica cambiar la forma en que Python trabaja con listas, charts, excepciones y más a bajo nivel, y genera de por sí incompatibilidades y distintos funcionamientos. Junto con eso, al hacer esos cambios, se abrieron las puertas para nuevass funcionalidades, lo que sumó lo suficiente para que el upgrade terminara siendo un salto mayor de versión.

– Ok, ¿pero qué tiene de tan bueno Python3?

– Varias cosas:

  • AsyncIO, un excelente pack de funcionalidades para hacer operaciones asincrónicas de manera nativa.
  • Multithreading nativo, que no depende del fork del sistema sino que puede usar una capa de abstracción extra.
  • Mejor manejo de errores, tracebaks que registran errores que pasaron mientras algo más falla, además de ser más precisos a donde apuntan.
  • Opción de FAIL_FAST en pytest para que si un test falla aborte
  • Imports relativos nativos
  • Ninguno de los bugs anteriores

– Ok, pero me dijeron que muchas librerías no son compatibles con Python 3. ¿Cómo soluciono eso?

– No hay por qué solucionarlo. Eso es una cruel y vil mentira: http://py3readiness.org/

Fernando Collova

Fernando Collová formó parte del equipo de intive – FDV, así como de su brigada Backend. Entró en la compañía en septiembre de 2015, y trabajó en un proyecto de «machine learning» para Intelligize, una empresa que provee información del mercado de valores. Posee amplia experiencia en C, Python, DevOps, y electrónica, y tiene un fuerte interés en la economía y las metologías ágiles.

Deja un comentario