Python: Conoce tu IDLE

Objetivo: invitación a aprovechar al máximo las características de un IDE y presentar un truco sencillo en IDLE.

Aunque para muchos les es suficiente tener abiertos un simple editor de texto y un terminal, lo cierto es que los IDEs surgen con la idea de hacernos la vida más fácil.

Tienes un amplio abanico de IDEs a tu disposición para programar en Python. Echa un vistazo a esta wiki para hacerte una idea.

Uno de mis favoritos es, sin lugar a dudas, IDLE, incluido directamente en las distribuciones Python sobre Windows y a un solo comando de instalación en cualquier Linux. Es relativamente simple, pero aún así ofrece las características mínimas que debe cumplir cualquier IDE que se precie.

Pero, la cuestión, independientemente del IDE de que se trate, ¿conoces y utilizas todo lo que te ofrece?

Muchas veces es como tener un coche de gama alta, repleto de posibilidades, pero conformarnos con que sea capaz de conducirnos de un lado a otro y no beneficiarnos de sus comodidades.

Merece la pena invertir un día o dos descubriendo las maravillas de nuestros IDEs, créeme. Todo el tiempo que emplees te será devuelto con creces; además, queda muy profesional ver manejar un IDE con soltura.

Voy a aprovechar la coyuntura para contarte un truco sencillo para IDLE pero que resulta muy práctico…

Para ilustrar en qué consiste, vamos a escribir un programa muy básico. Lo he dividido en dos módulos para que haya varios ficheros implicados.

# principal.py
# Cálculo del importe por comensal

import auxiliar

total_factura = input('¿A cuánto asciende la broma? ')
asistentes = input('¿Entre cuántas personas hay que repartir? ')
print('Tocamos a', auxiliar.importe(float(total_factura), float(asistentes)))

# auxiliar.py

def importe(cuenta, comensales):
    return cuenta/comensales

El programa simplemente calcula cuánto tiene que pagar cada comensal en una comida en grupo en un restaurante. En el fichero auxiliar.py está definida la función que calculará la división. Obviamente, no es necesario escribir una función para eso, pero lo he hecho para poder justificar un segundo fichero en el proyecto.

>>> 
¿A cuánto asciende la broma? 200
¿Entre cuántas personas hay que repartir? 10
Tocamos a 20.0

Vamos a provocar, deliberadamente un error en tiempo de ejecución. Tal como está escrito, el programa se halla indefenso ante un intento de división por cero:

>>> 
¿A cuánto asciende la broma? 200
¿Entre cuántas personas hay que repartir? 0
Traceback (most recent call last):
  File "C:\Users\javier\My Dropbox\pythonprad\pruebas\principal.py", line 8, in <module>
    print('Tocamos a', auxiliar.importe(total_factura, asistentes))
  File "C:\Users\javier\My Dropbox\pythonprad\pruebas\auxiliar.py", line 4, in importe
    return cuenta/comensales
ZeroDivisionError: division by zero

Como puedes comprobar, Python es muy generoso a la hora de proporcionar información sobre lo sucedido. Se ha provocado un ZeroDivisionError que ha hecho abortar el programa. Te indica además qué lineas de código provocaron el error y dónde están ubicadas. En el módulo principal, en el momento de la invocación y, en última instancia, en el auxiliar al realizar una operación no permitida.

Con esos datos, sólo te resta dirigirte al lugar donde se localiza el error y subsanarlo.

IDLE dispone de un modo muy rápido de hacerlo. Haz clic con el botón derecho sobre cualquier lugar de la línea que contiene la localización del error. Se te abrirá un pequeño menú contextual con la única opción:

Go to file/line

Haz clic y te aparecerá inmediatamente el módulo que contiene el error, posicionado en la línea crítica que lo provocó. Como aparecieron dos errores, uno en cada módulo, en función del lugar donde hagas clic con el botón derecho te llevará a uno u otro.

Ahora sólo falta subsanarlo:

# principal.py
# Cálculo del importe por comensal

import auxiliar

total_factura = input('¿A cuánto asciende la broma? ')
asistentes = input('¿Entre cuántas personas hay que repartir? ')
if asistentes == '0':
    print('¿Me estás vacilando o qué?')
else:
    print('Tocamos a', auxiliar.importe(float(total_factura), float(asistentes)))

O, mucho mejor aún:

# principal.py
# Cálculo del importe por comensal

import auxiliar

total_factura = input('¿A cuánto asciende la broma? ')
asistentes = input('¿Entre cuántas personas hay que repartir? ')
try:
    print('Tocamos a', auxiliar.importe(float(total_factura), float(asistentes)))
except:
    print('¿Me estás vacilando o qué?')

De este modo estaremos protegiendo nuestro código no sólo ante una eventual división entre cero, sino también ante la introducción por parte del usuario de un valor que no pudiera ser convertido a número:

>>> 
¿A cuánto asciende la broma? 200
¿Entre cuántas personas hay que repartir? pimiento
¿Me estás vacilando o qué?

Hablaremos del bloque try y la captura de excepciones en un artículo posterior.

En este caso el ejemplo era sumamente simple, pero tu proyecto podría estar compuesto de centenares de líneas dispuestas en varios ficheros. Desplazarse al punto en el que se ha producido un error puede ser una tarea incómoda. IDLE lo logra instantáneamente, pero tienes que conocerte el truco. Por lo general, dominar un IDE supone aprender un buen puñado de trucos así, pero es un esfuerzo que te ahorrará mucho tiempo, especialmente si pasas muchas horas programando.

Javier Montero Gabarró


Python: Conoce tu IDLE


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Deja un comentario