domingo, 2 de septiembre de 2018

Errores y excepciones


En Python se pueden observar 2 tipos de errores , los sintácticos y las excepciones.
Comencemos por los errores de sintaxis, llamados también errores de interpretación
>>> a=10
>>> if a print (a)
File "<stdin>", line 1
if a print (a)
^
SyntaxError: invalid syntax
>>>
El interprete Python apunta con un a flecha a donde detecta el error
Por otra parte las excepciones son errores detectados durante el tiempo de ejecución:
>>> a/(1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> a+b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> b=b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> b = "b"
>>> a+b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
Puede verse en la última línea el tipo de excepción y lo que sucedió.
Estas son tipos de excepciones estándares predefinidas ZeroDivisionError ; NameError ; TypeError, son identificadores incorporados al intérprete (no son palabras clave reservadas).
Por ejemplo una interrupción generada por el usuario se muestra con la excepción KeyboardInterrupt

Manejo de excepciones

Los errores de ejecución son llamados excepciones. Si durante la ejecución de un programa, surge una excepción (error) y este no es manejada, la excepción se propaga hacia el bloque que la invocó, si éste tampoco la maneja, la excepción continua propagándose hasta llegar a la parte importante del programa y si ésta tampoco la maneja se interrumpe la ejecución del programa.
Para el manejo de excepciones Python utiliza la sentencia try, except y finally
try: En este bloque se ubica todo el código que pueda generar una excepción
except: viene luego del bloque try y se encarga que capturar las excepciones y da la oportunidad de procesarlas adecuadamente
Veamos el siguiente ejemplo:
>>> valor= int(input("Ingrese un valor entero: "))
Ingrese un valor entero: "hola"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '"hola"'
>>>
Al no ingresar el entero esperado y escribir la palabra “hola” vemos que aparece la excepción “ValueError”
Ahora veamos como tratar la excepción con la sentencia try
>>> valor = "Esto debe ser un entero"
>>> while True:
... try:
... valor= int(input("Ingrese un valor entero: "))
... break
... except:
... print ("Error. Ingrese un valor entero")
...
Ingrese un valor entero: "hola"
Error. Ingrese un valor entero
Ingrese un valor entero: hola
Error. Ingrese un valor entero
Ingrese un valor entero: "un valor entero"
Error. Ingrese un valor entero
Ingrese un valor entero: un valor entero
Error. Ingrese un valor entero
Ingrese un valor entero: 20
>>>
Puede observarse que dado el “no ingreso de un entero” el código marca el error con
“Error. Ingrese un valor entero”
Hasta que es ingresado el número 20 que cumple con la condición
………………………………………………………….......................................
Dentro de un bloque try pueden ocurrirse distintos tipos de excepciones por lo que es posible utilizar varias sentencias except una para cada error, esto se hace especificando los nombres de las excepciones a continuación de except , entre paréntesis, separadas por comas y dos puntos al final:
except (RuntimeError, TypeError, NameError):
También luego de un bloque try es posible colocar varios bloques except y se ejecuta solo uno de ellos
La sentencia try podríamos interpretarla de la siguiente forma:
try:
Si se produce tal error
except:
haga tal cosa
Al final puede ubicarse la sentencia finally, para escribir sentencias de finalización que suelen ser de limpieza, la particularidad de este bloque es que se ejecuta siempre, haya excepción o no, aunque no es necesario que finally este presente

Como es que actúa Python

Al encontrarse con estos bloques. Python comienza a ejecutar las instrucciones que se encuentran dentro de un bloque try normalmente. Si durante la ejecución de esas instrucciones se levanta una excepción, Python interrumpe la ejecución en el punto exacto en que surgió la excepción y pasa a la ejecución del bloque except correspondiente y al terminar de ejecutar el bloque correspondiente, se pasa a la ejecución del bloque finally, si se encuentra definido

No hay comentarios:

Publicar un comentario