Cargando



Python - Manejo de Excepciones Avanzadas

En este tutorial veremos cómo podremos manejar las excepciones en Python, ya sea desde capturarla y seguir el flujo o capturarla y decidir qué acción tomar con las estructuras condicionales que ofrece el lenguaje.


oct 21 2013 18:54
Profesional
oct 21 2013 20:31
Una vez que una excepción es levantada queda como nuestro deber poder hacer un manejo de ella, de esta forma nuestro programa podrá ejecutar una acción, levantar un mensaje, solicitar la corrección del parámetro que ingrese el usuario, en fin muchas posibilidades.

Capturando Excepciones

Como habíamos mencionado anteriormente, lo importante de cuando vemos una excepción es poder capturarla de esta manera podemos decidir qué debe hacer el programa una vez ocurre esta situación, para poder hacer esto nos valdremos de los comandos try/except. Para demostrar lo antes descrito vamos a analizar un programa muy sencillo de división, como sabemos no podemos hacer una división de un número entre 0 por lo que esto nos levantará una excepción.

Empecemos construyendo nuestro código, recordemos que esto lo podemos hacer en un editor de texto cualquiera y debemos salvar el archivo con extensión .py de forma que podamos ejecutarlo en nuestra línea de comandos o consola.

x = input('Enter the first number: ')
y = input('Enter the second number: ')
print x/y[/size]
[size=4]


Esto funcionará de forma bastante adecuada hasta que el usuario ingrese el valor 0 como segundo argumento, esto levantará una excepción como podemos ver en la siguiente imagen de la corrida de este programa:

Python_Excepciones_Avanz1.jpg

Esto lo podemos prevenir utilizando el try/except que habíamos visto a inicio de esta sección, veamos nuestro código corregido:

try:
 x = input('Enter the first number: ')
 y = input('Enter the second number: ')
 print x/y
except ZeroDivisionerror:
print "The second number can't be zero!"


Esta forma de lidiar con este caso es bastante limpia, a pesar de todo también se pudiera hablar de que con un simple if que condicionara que el valor de y no fuese 0 sería una solución adecuada, sin embargo si añadiéramos más divisiones a nuestro programa necesitaríamos más condicionales, en cambio de esta forma solo necesitamos un solo manejador de la posible excepción que se genere.

Capturar más de una excepción

Continuando con el ejemplo de la división que venimos trabajando, vamos a ver qué sucedería si en vez de un 0 ingresamos algo más:


Python_Excepciones_Avanz2.jpg


En la imagen podemos ver que se ingresó un texto y nuestro manejador que solo esperaba una excepción del tipo ZeroDivisionerror no pudo hacer un manejo adecuado ya que no sabía qué hacer con la nueva excepción generada.

Para capturar la nueva excepción simplemente incorporaremos un nuevo bloque except para poder manejar la excepción TypeError que se genera por la división de un número entre un texto.

Veamos nuestro código corregido:

try:
 x = input('Enter the first number: ')
 y = input('Enter the second number: ')
 print x/y
 except ZeroDivisionerror:
 print "The second number can't be zero!"
 except TypeError:
 print "That wasn't a number, was it?"


Sí hubiésemos optado por utilizar condicionales if, esta tarea nos hubiese llevado muchas más líneas de código, aparte de hacer menos legible nuestro programa.

Capturando dos excepciones en el mismo bloque

Si lo que necesitamos es capturar varias excepciones en un solo bloque except lo que debemos es agregarlas en la declaración dentro de un paréntesis, veamos el código para entenderlo mejor:

[/size]
try:
x = input('Enter the first number: ')
y = input('Enter the second number: ')
print x/y
except ZeroDivisionerror:
 print "The second number can't be zero!"
except TypeError:[/size]
[size=4] print "That wasn't a number, was it?"


Como pudimos notar pase lo que pase la aplicación nos seguirá arrojando un mismo mensaje ya sea si se ingresa un 0 o algo diferente a un número.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X