lunes, 22 de julio de 2013

Manejo de errores en python parte 1/2


En la programación siempre cuando ejecutamos un  una solución escrita en algún lenguaje de programación lo más seguro es que de algunos errores ,a menos de que sepamos exactamente lo que estamos haciendo y como se va a comportar lo que estemos haciendo ,no es que no haya programadores que no se equivoquen pero esto no se trata de equivocarse si no de desviar problemas a soluciones y aun así un problema mismo podría ser una solución bien manejada.

En python tenemos una gran manera de manejar errores los cuales se basan en probar,con la palabra reservada try, para manejar un error solo es necesario encontrarlo primero, para ello vamos a ver un ejemplo:

Quiero importar el siguiente modulo:

 #!/usr/bin/env python3  
 # Le ponemos de nombre mi_modulo.py  
 def pinta():  
   print ("Hola")  

Y ahora en un script lo intentamos importar,pero accidentalmente nos equivocamos de nombre,o también podría ser que no lo tengamos siempre a la mano,por ejemplo que compartimos un código el cual necesita de ese modulo y las personas que lo descarguen solo descarguen el script y no asi el modulo,entonces en nuestro script lo importamos:

import mi_modulo

Ahora si ejecutamos el script,daria un error:



Mas en especifico el error:

ImportError

Ahora vamos a aprender como manejarlo,por ejemplo ese es un error de importación,en operaciones matemáticas tambien hay errores,en tipos de datos,en IO,etc,pero la misma consola nos dice cual es:

Para manejarlo usamos la palabra reservada except:

except nombre_error:

Pero antes adentro de una sentencia try hacemos lo que causa el error:

 try:  
   import mi_modulo  
 except ImportError:  
   # Aquí hacemos lo que queramos si entra en error,por ejemplo:  
   print ("No existe el modulo")  

:D

Python también nos deja manejar los errores desde el tipo exceptions,un tipo de dato que nos devuelve una tupla, esta tupla devuelve un numero de argumentos los cuales podemos usar,para el manejo de errores,en realidad no es una tupla,ya que el tipo de dato no lo verifica,pero retorna valores de tipo lista,solo que es inmutable:

Para ello usamos la palabra reservada as:

 try:  
   import mi_modulo  
 except ImportError as error:  
   print (error)  

Para ver los argumentos de error o el nombre que le asignemos usamos esta sintaxis:

print (error.args)

Y podemos hacer esto,por ejemplo:

 try:  
   import mi_modulo  
 except ImportError as error:  
   print (error[0])  

Ahora,si queremos manejar lo que sucedería después de esto,podemos hacerlo escribiendo fuera del bloque try/except pero si queremos que se ejecute en el mismo,podemos hacer uso de else:

 try:  
   import mi_modulo  
 except ImportError as error:  
   print (error[0])  
 else:  
   print ("Usando el modulo :D")  
   print ("O cualquier otra cosa")  

Por ejemplo:

 #!/usr/bin/env python3  
   
 try:  
   ar = open ("Archivo.txt","r")  
 except IOError as io:  
   for i in io.args:  
     print ("Error: %s")%(i)  
   print ("Tipo : %s")%(type(io))  
 else:  
   print ar.read()  
   ar.close()  

Otro ejemplo:

 #!/usr/bin/env python3  
   
 while 1:  
   print ("Bucle infinito" + ("-"*30))  
   try:  
     var = input("No puedes salir a menos que escribas salir : ")  
   except EOFError:  
     print ("\n;)")  
   except KeyboardInterrupt:  
     print ("\nSin trucos ;)")  
     continue  
   else:  
     if var.lower() == "salir" or var.lower() == "s":  
       break  

Eso es todo  de esta parte :D




No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.