7 errores de Python que cometen todos los desarrolladores principiantes, y cómo evitarlos

La mañana comenzó perfectamente. Había terminado con una nueva función incluso antes de terminar mi café

Mi productividad se elevaba mucho. En ese momento, no sabía que era demasiado bueno para ser verdad.

El problema tardó solo unas pocas horas en aparecer. Sin embargo, encontrar la raíz del problema requirió mucho más tiempo. La solución requirió el resto del día. Yo era un principiante en aquel entonces. Con esto, he aprendido una importante lección sobre listas en Python para toda la vida.

¿Te suena familiar? Sucede con todos, pero siempre es mejor aprender del error de otras personas. En esta publicación, he recopilado siete de ellos, lo que puede ahorrarle innumerables horas de depuración.

1. Funciones con efectos secundarios.

Dado que Python no es un lenguaje puramente funcional como Haskell, las funciones pueden tener efectos secundarios. Hablando estrictamente, esto no es un error, pero es fácil desordenar las cosas involuntariamente. En Python, los objetos son tipos de referencia. Entonces, cuando pasa una lista como argumento, se pasa una referencia en lugar del valor. Esto implica que si los modifica en una función, los cambios se reflejarán afuera.

Esto puede generar sorpresas muy desagradables y horas de depuración. (Vea mi introducción.) Tenga cuidado con estos y ahórrese el problema temprano.

2. Llamadas de función en argumentos predeterminados

Los argumentos predeterminados pueden ser difíciles de usar a veces ¿Por qué el valor de retorno es el mismo para cada llamada? La razón es que Python evalúa las expresiones en argumentos predeterminados cuando se define la función.

3. Argumentos predeterminados mutables

Este problema es una combinación de los dos anteriores.

Hay dos cosas que suceden aquí.

Python evalúa la expresión [] cuando se define la función. (Esto es equivalente a llamar a la lista ()). La referencia de este objeto está vinculada al argumento. Por lo tanto, siempre que llame a la función, se utilizará el mismo objeto. Por lo tanto, usar objetos mutables como argumentos predeterminados no es una buena idea. Nunca deberías hacer eso.

4. Asignaciones de referencia no intencionadas

Como hemos visto, cada objeto es un tipo de referencia en Python. Esto puede causar cierta confusión además de pasarlos a funciones Cuando ejecuta b = a, en realidad almacena la referencia de a. Por lo tanto, ayb apunta al mismo objeto. Para resolver esto,debe usar la función de copia profunda integrada. Esto recursivamente copia todos los atributos de tipo de valor a la nueva variable.

Si intenta lo mismo con números enteros en lugar de lista, todo se comporta como cabría esperar. La razón es que los tipos enteros son inmutables, por lo que sobrescribe la referencia cuando los cambia.

5. de algo import *

Lo sé, todos hicimos esto en un momento. Hay varias desventajas de esto.

Primero, las funciones en diferentes espacios de nombres pueden tener el mismo nombre, causando confusión en toda su base de código.

En segundo lugar, cuando importa un módulo en Python, se ejecutará todo el código de ese módulo. Esto puede ralentizar significativamente las cosas si hay muchos submódulos para importar.

6. Unir caminos con concatenación de cadenas

Suponga que tiene que abrir un archivo llamado data.csv desde la carpeta dada por la variable data_folder. ¿Cómo debe determinar la ruta del archivo? Si estas haciendo entonces no lo estás haciendo bien. Esto no funcionaría en Windows, por ejemplo. Es posible que no te experimentes a ti mismo, pero tus colegas que usan diferentes configuraciones de desarrollo seguramente sentirán el dolor.

Para resolver esto, debe usar pathlib, la herramienta incorporada de Python o simplemente la función os.path.join:

7. Baja cobertura de prueba

Este es un problema de alto nivel. Especialmente cuando eres un principiante, los beneficios de las pruebas unitarias no están claros. Sin embargo, cada desarrollador experimentado puede decirle que es absolutamente esencial. Trabajar con código no probado es como jugar whack-a-mole: corrige un error, introduce otro.

Evitar esto comienza desde el comienzo de su proyecto. Tan pronto como agregue una característica (o incluso una función), debe escribir casos de prueba para validar la implementación. Hay varias bibliotecas excelentes para esto, por ejemplo, la unidad de prueba integrada o la muy popular pytest.

Debería invertir mucho tiempo en probar su código. Puede tomar algún tiempo hacer eso, pero es una inversión a largo plazo. Ahorrará mucho más tiempo de depuración.

En resumen, estos son los siete errores más dolorosos que puede cometer en Python. Ciertamente encontrará algo más durante su búsqueda de dominio de Python. Sin embargo, con esta guía en su haber, tendrá conocimiento para evitar las más frecuentes.

Ahora ve y construye algo increíble, con las pruebas unitarias adecuadas.