Skip to main content

Aprender a depurar con GitHub Copilot

Identifica y corrige errores en el código solicitando ayuda a GitHub Copilot.

Encontrar y corregir errores en el código puede ser frustrante, especialmente si acabas de empezar como desarrollador. Afortunadamente, herramientas como GitHub Copilot pueden identificar y solventar rápidamente los errores, lo que te permite centrarte en un trabajo más creativo e interesante.

Requisitos previos

En los ejemplos de este artículo se supone que usas GitHub Copilot para depurar un proyecto de Python en Visual Studio Code (VS Code). Para seguir los ejemplos, debes:

Aprender a depurar a través de ejemplos

Hay dos situaciones principales que encontrarás al intentar ejecutar código con errores:

  • El código se cierra antes de que termine de ejecutarse y recibirás un mensaje de error.
  • El código se ejecuta sin errores, pero la salida es diferente de la esperada.

Afortunadamente, Copilot puede ayudar a depurar el código en ambas situaciones. Para obtener información sobre cómo hacerlo, consulta los ejemplos siguientes.

Depuración de un error con GitHub Copilot

Al ejecutar código con errores, a menudo recibirás un mensaje de error. El mensaje te indica el archivo y la línea donde se produjo el error y describe brevemente lo que salió mal. Sin embargo, los mensajes de error pueden resultar confusos. Para comprender y corregir completamente el error, podemos pedir ayuda a Copilot.

Vamos a probarlo con el archivo bugged_dice_battle.py en el repositorio new2code/debug-with-copilot. Este programa simula una batalla de dados entre dos jugadores con el código siguiente:

# Import the random module to easily generate pseudo-random numbers
import random

# Define a function that simulates a dice battle between two players
def dice_battle():

    # Generate random numbers between 1 and 6 for each player's die roll
    die_1 = random.randint(1, 6)
    die_2 = random.randint(1, 6)

    # Compare the die rolls and return the result as a string
    if die_1 > die_2:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 1 wins!"
    elif die_1 < die_2:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 2 wins!"
    else:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". It's a tie!"

print(dice_battle())

En primer lugar, es necesario clonar el repositorio localmente:

  1. En VS Code, abre la paleta de comandos con Comando+Mayús+P (Mac) o Ctrl+Mayús+P (Windows/Linux).

  2. Escriba Git: Clone y presione Entrar.

  3. Pega la dirección URL del repositorio new2code/debug-with-copilot:

    Text
    https://github.com/new2code/debug-with-copilot
    
  4. Presiona Entrar y elige una ubicación para guardar el repositorio en el equipo.

  5. Cuando se te solicite, abre el repositorio en VS Code.

Ahora que hemos clonado el repositorio, vamos a ejecutar bugged_dice_battle.py para ver la salida:

  1. Abre la paleta de comandos presionando Cmd+Mayús+P (Mac) o Ctrl+Mayús+P (Windows/Linux).

  2. Escriba Terminal: Create New Terminal y presione Entrar.

  3. Si usas Mac o Linux, en la pestaña terminal, pega el código siguiente:

    Shell
    python bugged_dice_battle.py
    

    De lo contrario, si usas Windows, pega el código siguiente:

    Shell
    py bugged_dice_battle.py
    
  4. Presiona Entrar para ejecutar el programa.

Desafortunadamente, obtenemos texto de error en nuestro terminal que termina con el siguiente mensaje: TypeError: can only concatenate str (not "int") to str. Para entender lo que significa esto, presiona Comando+Mayús+I (Mac) o Ctrl+Alt+I (Windows/Linux) para abrir Copilot Chat, pega y envía la siguiente solicitud:

Text
Explain in depth why my code produces the following error and how I can fix it:

TypeError: can only concatenate str (not "int") to str

Copilot responderá que se produce el error porque estamos intentando concatenar los enteros die_1 y die_2 en las cadenas, y solo se pueden concatenar cadenas en cadenas. A continuación, proporcionará una versión actualizada del código que corrige el error mediante la función str() para convertir los enteros en cadenas antes de concatenarlos.

Depuración de una salida incorrecta con GitHub Copilot

A veces, se ejecuta código con errores sin producir ningún error, pero la salida es claramente incorrecta. En este caso, la depuración puede ser más difícil porque VS Code no puede indicarle la ubicación ni la descripción del error.

Para estos errores "invisibles", Copilot es particularmente útil. Vamos a obtener una experiencia práctica con el archivo bugged_factorial_finder.py en el repositorio new2code/debug-with-copilot. El programa Python se supone que debe calcular un factorial y contiene el código siguiente:

# Initialize the factorial result to 1
factorial = 1

# Initialize the input number to 6
number = 6

# Loop from 1 to number (inclusive) and multiply factorial by each number
for i in range(1, number + 1):
    factorial *= factorial * i

print(f"The factorial of {number} is {factorial}")

Dado que ya hemos clonado el repositorio localmente, vamos a ejecutar bugged_factorial_finder.py para ver la salida:

  1. En VS Code, abre la paleta de comandos con Comando+Mayús+P (Mac) o Ctrl+Mayús+P (Windows/Linux).

  2. Escriba Terminal: Create New Terminal y presione Entrar.

  3. Si usas Mac o Linux, en la pestaña terminal, pega el código siguiente:

    Shell
    python bugged_factorial_finder.py
    

    De lo contrario, si usas Windows, pega el código siguiente:

    Shell
    py bugged_factorial_finder.py
    
  4. Presiona Entrar para ejecutar el programa.

Desafortunadamente, el código no funciona según lo esperado. Queremos que devuelva 720, el valor correcto de 6 factoriales, pero la salida es mucho mayor que esa.

Para comprender lo que ha ido mal, con el archivo bugged_factorial_finder.py abierto en VS Code, abre Copilot Chat y envía la siguiente solicitud:

Text
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.

Copilot señalará que, al estar usando el operador *=, en realidad estamos multiplicando factorial por i y factorial. En otras palabras, estamos multiplicando por un factorial extra para cada iteración del bucle.

Para corregir este error, Copilot sugerirá código que quite el factorial extra de la ecuación o que cambie el operador *= a =.

Depuración de tu propio proyecto

Ahora que has practicado la depuración de algunos programas sencillos con Copilot, puedes usar las mismas metodologías para buscar y corregir errores ocultos en tu propio trabajo.

Por ejemplo, para depurar un mensaje de error generado por el código, envía a Copilot la siguiente solicitud:

Text
Explain in depth why my code produces the following error and how I can fix it:

YOUR-ERROR-MESSAGE

De lo contrario, si estás depurando una salida incorrecta, pregunta a Copilot por qué la salida es incorrecta y cómo puede corregirla. Para obtener los mejores resultados, proporciona tanto contexto como sea posible sobre cómo la salida difiere de tus expectativas.

Con estas tácticas, tienes todo lo necesario para corregir errores en tu proyecto.

Pasos siguientes

A medida que continúes codificando, es probable que encuentres escenarios de problemas y errores específicos que son difíciles de depurar. Para mostrarte una lista de posibles problemas y ejemplos de solicitudes de Copilot Chat para corregirlos, consulta Depuración de errores.