Capturando errores en python
A esta altura, estarán poniéndole complejidad al código con el que estén jugando, y habran tenido la necesidad de capturar, los errores que ejecutó su código.
Obviamente los errores de sintaxis los detecta el intérprete antes de la ejecución del código. Pero los errores de tipo exception los detecta en tiempo de ejecución.
Las exception son errores que ocurren cuando el programa ejecuta una operación invalida, por ejemplo intenta dividir por cero. Es preciso saber que tipo de errores son esperados o no, ya que si nosotros esperamos todo como BaseException podemos tener problemas no deseados. Por este motivo tenemos que tener la jerarquía de errores bien presente. Esto lo ilustra muy bien Darío Ocles esto hay en el link (http://phpython.blogspot.com/2007/07/jerarqua-de-las-excepciones-en-python.html).
La jerarquía de errores es:
BaseException +-- SystemExit +-- KeyboardInterrupt +-- Exception +-- GeneratorExit +-- StopIteration +-- StandardError | +-- ArithmeticError | | +-- FloatingPointError | | +-- OverflowError | | +-- ZeroDivisionError | +-- AssertionError | +-- AttributeError | +-- EnvironmentError | | +-- IOError | | +-- OSError | | +-- WindowsError (Windows) | | +-- VMSError (VMS) | +-- EOFError | +-- ImportError | +-- LookupError | | +-- IndexError | | +-- KeyError | +-- MemoryError | +-- NameError | | +-- UnboundLocalError | +-- ReferenceError | +-- RuntimeError | | +-- NotImplementedError | +-- SyntaxError | | +-- IndentationError | | +-- TabError | +-- SystemError | +-- TypeError | +-- ValueError | | +-- UnicodeError | | +-- UnicodeDecodeError | | +-- UnicodeEncodeError | | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning
Try:
Try lo que hace es probar con un cierto bloque de código y si produce una exception la podremos capturar con except.
Su sintaxis es
try_stmt ::= try1_stmt | try2_stmt try1_stmt ::= «try» «:» suite («except» [expression [«,» target]] «:» suite)+ [«else» «:» suite] [«finally» «:» suite] try2_stmt ::= «try» «:» suite «finally» «:» suite
Un ejemplo seria mejorar el if.py de la entrada anterior a try.py
#!/usr/bin/python # Nombre de Fichero : try.py b= True try: varIn = int(input("Un numero por favor: ")) except (RuntimeError, TypeError, NameError): print "No es un numero" b = False if b: if varIn == 4: print "el numero es cuatro" elif varIn > 4: print "el numero es mayor que cuatro" else: print "el numero es menor que cuatro"
Raise Exception:
Nosotros podremos crear una excepción mediante el modulo exceptions y luego podremos ejecutar esta exception por medio de raise para ccapturarla con except.
Un ejemplo de esto podría ser:
import exceptions import sys errorPropio = exceptions.Exception try: numero = input("numero: ") if numero 1: # en este caso no podrmos dividir por 1 print (10/numero) else: raise errorPropiom,"Error" except NameError: print str(sys.exc_type) + ":" + str(sys.exc_value)
En este ejemplo solo espera la exception que creamos nosotros. Sino vea que pasa cuando ponemos 0.