Python R2


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.