El documento describe:
1) Cómo usar el módulo pdb en Python para depurar código de forma sencilla.
2) Técnicas comunes para encontrar bugs, como explorar caminos alternativos y pedir otra perspectiva.
3) Cómo crear errores personalizados en Python usando la palabra raise.
4) Formas de probar software en Python, incluyendo pruebas de caja negra, caja de cristal y unittest.
5) Cómo manejar archivos de entrada/salida en Python usando la función open.
7. ● En Python, la manera más
sencilla de debuguear es
utilizando el módulo pdb
Debugging
def divisores(num):
divisores = []
for i in range(1, num + 1):
if num % i == 1:
divisores.append(i)
return divisores
def run():
num = int(input('Ingresa un número:
'))
print(divisores(num))
print("Terminá mi programa")
if __name__ == '__main__':
run()
8.
9. ● Encuentraalossospechososcomunes.
● En lugar de preguntarte por qué un
programa no funciona, pregúntate
por qué está funcionando de esta
manera.
● Esposiblequeelbugnoseencuentre
dondecreesqueestá.
● Explícale el problema a otra persona.
De preferencia que no tenga
contexto.
● Lleva un registro de lo que has
tratado,preferentementeen laforma
detests.
● Veteadormir.
Errores Comunes
10. ● Python permite declarar errores específicos para cada
programa.
● Es buena práctica extender el tipo de error del que se trate.
● Los errores se “lanzan” con el keyword raise
class ErrorDePosicion(Exception):
“””Explicación del error”””
pass
if not posicion:
raise ErrorDePosicion(‘mensaje’)
Errores propios
11. Errores propios
def es_palindromo(palabra):
palabra = palabra.replace(' ', '').lower()
if palabra[::] == palabra[::-1]:
return True
else:
return False
def run():
palabra = input('Ingrese una palabra: ')
if es_palindromo(palabra):
print('Es palindromo')
else:
print('No es palindromo')
if __name__ == "__main__":
run()
13. ● Se basan en la
especificación de la
funciónoel programa.
● Prueba inputs y valida
outputs.
● Unit testing o integration
testing.
Pruebas de caja negra
import unittest
def suma(num_1, num_2):
return abs(num_1) + num_2
class
CajaNegraTest(unittest.TestCase):
def test_suma_dos_positivos(self):
num_1 = 10
num_2 = 5
resultado = suma(num_1, num_2)
self.assertEqual(resultado, 15)
if __name__ == '__main__':
unittest.main()
14. ● Se basan en el flujo del
programa.
● Prueba todos los
caminos posibles de una
función. Ramificaciones,
bucles for y while,
recursión.
● Regressiontestingomocks.
Pruebas de Caja de Cristal
import unittest
def es_mayor_de_edad(edad):
if edad >= 18:
return False
else:
return False
class
PruebaCristalTest(unittest.TestCase):
def test_es_mayor_de_edad(self):
edad = 20
resultado = es_mayor_de_edad(edad)
self.assertEqual(resultado, True)
if __name__ == '__main__':
unittest.main()
15. ● Python puede leer y escribir archivos con la función open
● La función open regresa un objeto archivo (file)
● Los archivos pueden ser de texto o binarios
● Se tiene que especificar el modo en que se maneja el archivo
○ ‘r’ = read
○ ‘w’ = write
○ ‘a’ = append
○ ‘r+’ = read and write
● Se debe cerrar el archivo con el método close
● La mejor manera de manejar archivos es con el keyword with
Manejo de archivos
16.
17. ● El objeto archivo tiene dos métodos para leerlo: read y readlines
Lectura de archivos
def leer():
numeros = []
with open("./archivos/numeros.txt",
"r", encoding="utf-8") as f:
for linea in f:
numeros.append(int(linea))
print(numeros)
def run():
leer()
if __name__ == '__main__':
run()
•WITH: En python se denomina como un
“manejador contextual”. Controla el flujo del
archivo y se asegura que el archivo no se
rompa en caso de que se cierre
inesperadamente.
•OPEN: Abre el archivo. Recibe parámetros.
PARÁMETROS: Si o si tiene que recibir
la ruta del archivo, y el modo de
apertura (r, w, a). Aunque puede recibir
otros parámetros más si queremos, pero
estos son opcionales.
•AS: Se le agrega un alias al final para luego
poder llamarlo.
18. ● Para escribir a un archivo, se utiliza el método write
Escritura de archivos
•WITH: En python se denomina como un
“manejador contextual”. Controla el flujo del
archivo y se asegura que el archivo no se
rompa en caso de que se cierre
inesperadamente.
•OPEN: Abre el archivo. Recibe parámetros.
•PARÁMETROS: Si o si tiene que recibir
la ruta del archivo, y el modo de
apertura (r, w, a). Aunque puede recibir
otros parámetros más si queremos, pero
estos son opcionales.
•AS: Se le agrega un alias al final para luego
poder llamarlo.
def escribir():
nombres = ["Homero", "Marge",
"Marta"]
with open("./archivos/nombres.txt",
"w", encoding="utf-8") as f:
for nombre in nombres:
f.escribir(nombre)
f.escribir("n")
def run():
escribir()
if __name__ == '__main__':
run()
19. ● PyPi (python package index) es un repositorio de paquetes de
terceros que se pueden utilizar en proyectos de python.
● Para instalar un paquete, es necesario utilizar la herramienta
pip.
● La forma de instalar un paquete es ejecutando el
comando pip install paquete.
● También se puede agrupar la instalación de varios paquetes a
la vez con el archivo requirements.txt
Paquetes de terceros
20. ● Las pruebas automatizadas son una forma de verificar que el software:
○ Cumple con los requisitos técnicos y de negocio de la especificación
○ Funciona
● Python incluye un módulo específico para realizar esta tarea: unittest
● Los tests funcionan realizando afirmaciones (assertions) sobre el valor
de regreso de una función o el estado de una clase.
● Las pruebas se corren con test runners. El más común en Python se llama
nose.
● Los programadores profesionales escriben su software, especificando
primero las pruebas. Esto se conoce como test driven development.
Pruebas Automatizadas
21. Python Docstring Generator
Mantener una buena documentación en tu
código es valioso y esta extensión te
ayudará a cumplir con tu cometido. Pues al
colocar comillas dobles dentro de una
clase, método o función generará una
plantilla para tu docstring y así proveer de
la información necesaria de lo que estás
creando.
Code Runner
Es natural que mientras escribimos código
lo depuramos mediante su ejecución y para
esto mismo es Code Runner. Podrá ejecutar
tu código directamente desde la misma
ventana sin tener que pasar a la terminal.
Este plugin es grandioso no solo para
Python, pues es compatible con más de 20
lenguajes de programación distintos.
Trailing Spaces
Otro plugin de uso general es Trailing
Spaces, el cual permite ver aquellos
espacios vacíos al final o entre líneas para
eliminarlos. Bastante práctico considerando
que Python utiliza la indentación como base
de su estructura.
Better Comments
Al igual que los docstrings también
podemos colocar comentarios que sean
efectivos y con este plugin puedes utilizar
un formato de color especial para datos
importantes, alertas, tareas pendientes o
consideraciones.
Better Comments es compatible también
con múltiples lenguajes.
22. Si es una buena idea,
continuad y llevadla a
término. Es mucho más fácil
pedir disculpas que conseguir
el permiso necesario