Este artículo explica cómo capturar excepciones (errores no programáticos, de tiempo de ejecución) en Python, y cuáles son los tipos de excepciones disponibles.



Aunque una sentencia o expresión sea sintácticamente correcta, puede causar un error cuando se intenta ejecutarla:

>>>  z = 0
>>>  asdf = 10 / z
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 

En este ejemplo se intenta dividir por cero. Se observa que la expresión asdf = 10 / z es sintácticamente correcta, pero como z es igual a cero, se produce un error en tiempo de ejecución, llamado excepción.

Cuando el intérprete Python encuentra un error en tiempo de ejecución, arroja una excepción. Si esta excepción no es capturada y manipulada correctamente por el programa, resulta fatal. La ejecución del programa se detiene inmediatamente arrojando el error por pantalla.

Sin embargo es posible capturar las excepciones fácilmente, para tomar acciones paliativas y resolver el problema de manera elegante. Es claro que al escribir un programa no se puede predecir cuándo y dónde se producirá una excepción, pero es posible reconocer ciertas secciones de código propensas a errores (por ejemplo aquellas que dependen de entradas del usuario).

En Python es posible definir secciones que capturen excepciones utilizando la sentencias try y except:

import cgi

try:
    args = cgi.FieldStorage()
    page = args['page'].value
    action = args['action'].value
except KeyError:
    page = "index"
    action = ""

El bloque try contiene el código sobre el cual se capturarán posibles excepciones. El bloque except especifica qué tipo de excepción se capturará (en el ejemplo "KeyError") y las acciones a tomar (cleanup) en caso de ocurrir una excepción de tal tipo.

En la página de manual Built-in Exceptions se detallan los tipos y jerarquía de las excepciones incorporadas en el lenguaje:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StandardError
      |    +-- BufferError
      |    +-- 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
           +-- BytesWarning

Referencias

Python 2.7.11 Documentation - Errors and Exceptions

Python 2.7.11 Documentation - Built-in Exceptions


Tal vez pueda interesarte


Compartí este artículo