Explora las técnicas de depuración por google

Explora las técnicas de depuración

Ya conoces tres tipos de errores que puedes encontrar mientras trabajas en Python y, además, aprendiste las estrategias para depurar estos errores. Esta lectura analiza más a fondo estos conceptos con estrategias y ejemplos adicionales para depurar el código en Python.

Tipos de errores

Obtener mensajes de error o ver que el código que se está ejecutando no funciona de acuerdo a lo esperado es una parte normal del desarrollo de código en Python. Lo importante es que puedes encontrar la manera de corregir estos errores cuando se generan. Entender los tres tipos de errores principales puede ser de mucha ayuda. Estos incluyen errores de sintaxis, errores lógicos y excepciones.

Errores de sintaxis

Un error de sintaxis implica el uso no válido de un lenguaje de programación, y suele ocurrir cuando hay un error en la propia sintaxis de Python. Algunos ejemplos comunes de errores de sintaxis incluyen olvidar un signo de puntuación, como un corchete de cierre para una lista o dos puntos después de un encabezado de función. 

Si se ejecuta código con errores de sintaxis, la salida identificará la ubicación del error con el número de línea y una parte del código afectado. También describirá el error. Los errores de sintaxis suelen comenzar con la etiqueta "SyntaxError:", seguida de una descripción del error que podría ser, simplemente, "invalid syntax" (sintaxis no válida). Si se te olvida incluir un paréntesis de cierre en una función, la descripción podría ser "unexpected EOF while parsing" (EOF inesperado durante el análisis sintáctico). "EOF" significa "end of file" (fin de archivo). 

El siguiente código contiene un error de sintaxis. Ejecútalo y examina su salida:

Esto genera el mensaje "SyntaxError: EOL while scanning string literal" (Error de sintaxis: EOL al escanear el literal de cadena). "EOL" significa "end of line" (fin de línea). El mensaje de error también indica que el error ocurre en la primera línea y que se produjo porque faltaba una comilla al final de la cadena en la primera línea. Puedes corregirlo si agregas esa comilla que falta.

Nota: Es posible que encuentres la etiqueta de error "IndentationError" (Error de sangrado) en lugar de "SyntaxError" (Error de sintaxis). "IndentationError" es una subclase de "SyntaxError" que se produce cuando la sangría utilizada con una línea de código no es sintácticamente correcta.

Errores lógicos

Un error lógico se produce cuando la lógica utilizada en el código produce resultados no deseados. Es posible que los errores lógicos no generen mensajes de error. En otras palabras, el código no hará lo que esperas que haga, aunque sigue siendo válido para el intérprete. 

Por ejemplo, usar el operador lógico incorrecto, como un signo mayor o igual que (>=) en lugar de un signo mayor que (>) puede generar un error lógico. Python no evaluará la condición como esperas que lo haga. Sin embargo, el código es válido y se ejecutará sin generar un mensaje de error. 

El siguiente ejemplo genera un mensaje que indica si un usuario alcanzó o no el número máximo de cinco intentos de inicio de sesión. La condición en la sentencia if debe ser login_attempts > 5, pero se escribe como login_attempts >= 5.  Se asignó un valor de 5 a login_attempts para que puedas explorar cuál es el resultado en esa instancia:

La salida muestra el mensaje "User has not reached maximum number of login attempts." Sin embargo, esto no es cierto, ya que el número máximo de intentos de inicio de sesión es de cinco. Este es un error lógico.

Los errores lógicos también pueden generarse si se asigna el valor incorrecto en una condición, o cuando un error en la sangría hace que una línea de código se ejecute de una manera que no estaba planeada.

Excepciones

Una excepción es un error que involucra código que no se puede ejecutar aunque sea sintácticamente correcto. Esto sucede por diversos motivos.

Uno habitual es cuando el código incluye una variable sin asignar o una función sin definir. En este caso, la salida incluirá "NameError" para indicar que se trata de un error en el nombre. Después de ejecutar el siguiente código, usa el mensaje de error para determinar qué variable está sin asignar:

La salida indica que hay un "NameError" que involucra la variable inusual_logins. Puedes corregirlo si asignas un valor a esta variable.

Además de los errores de nombre, se generan los siguientes mensajes para otros tipos de excepciones:

  • "IndexError": Se genera un error de índice al colocar un índice con notación entre corchetes que no existe en la secuencia a la que se hace referencia. Por ejemplo, en la lista usernames = ["bmoreno", "tshah", "elarson"], los índices son 0, 1 y 2. Si hiciste referencia a esta lista con la sentencia print(usernames[3]), se generará un error de índice.

  • "TypeError": Se genera un error de tipo al usar el tipo de datos incorrecto. Por ejemplo, si para realizar un cálculo matemático, agregaste un valor de cadena a un número entero, obtendrás un error de tipo.

  • "FileNotFound": Se genera un error de archivo no encontrado si intentas abrir un archivo que no existe en la ubicación especificada.

Estrategias de depuración

Ten en cuenta que si tienes varios errores, el intérprete de Python emitirá mensajes de error de uno en uno, comenzando con el primer error que encuentre. Después de corregir ese error y volver a ejecutar el código, el intérprete emitirá otro mensaje para el siguiente error de sintaxis o excepción.

Cuando se trata de errores de sintaxis, los mensajes de error que se generan suelen ayudarte a corregir el error. Sin embargo, cuando se trata de errores lógicos y excepciones, es posible que necesites otras estrategias.

Depuradores

En este curso, estuviste ejecutando código en un entorno de cuaderno. Sin embargo, puedes escribir código Python en un entorno de desarrollo integrado (IDE). Un entorno de desarrollo integrado (IDE) es una aplicación de software para escribir código que brinda asistencia de edición y herramientas de corrección de errores. Muchos IDE ofrecen herramientas de detección de errores en forma de depurador. Un depurador es una herramienta de software que ayuda a localizar el origen de un error y evaluar sus causas.

Cuando no puedas encontrar la línea de código que está causando el problema, los depuradores te ayudan a acotar el origen del error en tu programa mediante puntos de ruptura. Estos son marcadores que se colocan en ciertas líneas de código ejecutable e indican qué secciones de código deben ejecutarse al depurar.

Algunos depuradores también tienen una función que permite verificar los valores almacenados en las variables a medida que van cambiando en todo el código. Esto es especialmente útil en los errores lógicos, para que puedas localizar dónde se cambiaron involuntariamente los valores de las variables.

Uso de sentencias print

Otra estrategia de depuración es incorporar sentencias print temporales que estén diseñadas para identificar el origen del error. Debes incorporarlas estratégicamente para que se impriman en diversas ubicaciones del código. Puedes especificar números de línea, así como texto descriptivo acerca de la ubicación. 

Por ejemplo, es posible que tengas un código destinado a agregar nuevos usuarios a una lista aprobada y, luego, a mostrar esa lista aprobada. El código no debería agregar usuarios que ya están en la lista aprobada. Cuando analices la salida de este código después de ejecutarlo, te darás cuenta de que hay un error lógico:

Aunque obtengas el mensaje "bmoreno already in list", se agrega una segunda instancia de "bmoreno" a la lista. En el siguiente código, se agregaron sentencias print al código. Al ejecutarlo, puedes examinar qué es lo que imprime:

La sentencia print "line 5 - inside for loop" aparece dos veces, lo que indica que Python ingresó el bucle for para cada nombre de usuario en new_users. Esto es lo esperado. Además, la sentencia print "line 7 - inside if statement" solo aparece una vez, y esto también es lo esperado porque solo uno de estos nombres de usuario ya estaba en approved_users.

Sin embargo, la sentencia print "line 9 - before .append method" sale dos veces. Esto significa que el código llama al método .append() para ambos nombres de usuario, aunque uno de ellos ya está en approved_users. Esto ayuda a aislar el error lógico a esta área, y puede hacer que te des cuenta de que la línea de código approved_users.append(user) debería ser el cuerpo de una sentencia else para que solo se ejecute cuando user no esté en approved_users.

Conclusiones clave

Hay tres tipos principales de errores que encontrarás al codificar en Python. Los errores de sintaxis implican un uso no válido del lenguaje de programación. Los errores lógicos se generan cuando la lógica producida en el código produce resultados no deseados. Las excepciones involucran código que no se puede ejecutar aunque sea sintácticamente correcto. Recibirás mensajes de error para errores de sintaxis y excepciones que pueden ayudarte a corregir estos errores. Además, usar depuradores e insertar sentencias print pueden ayudarte a identificar errores lógicos y otras excepciones de depuración.

Comentarios

Entradas más populares de este blog

La Importancia de la Selección Genética en la Producción Avícola

Análisis de viabilidad económica y sostenibilidad de la crianza, incubación y alimentación de gallinas ponedoras para un consumo saludable en venta Bogotá, Colombia

Ventajas y Desventajas de los Proyectos Avícolas en el Campo Colombiano