Saber que excepciones lanza una función

Chema Cortes py en ch3m4.org
Jue Ago 27 07:03:04 CEST 2009


>Ya por curiosidad, cuando tienes una función en la que no documentan
>sus excepciones, ¿cómo haces para saber qué excepciones puede lanzar?

Por contra de lo que afirma Hernan, sí creo que algo se puede hacer usando la 
"introspección". Si un módulo está programado como debe, las excepciones 
definidas serán subtipos de la clase Exception, por lo que se podría obtener 
un listados de excepciones con un código cómo éste:

from types import ModuleType

def find_exceptions(module):
    exceptions=[]
    for k,o in vars(module).iteritems():
        if isinstance(o,type):
            if isinstance(o,ModuleType):
                exceptions.extend(find_exceptions(o))
            elif issubclass(o,BaseException):
                exceptions.append(k)
    return exceptions


Por ejemplo, para saber las excepciones del módulo "sqlite3":

import sqlite3

print find_exceptions(sqlite3)

---> ['Warning', 'InternalError', 'ProgrammingError', 'NotSupportedError', 
'DataError', 'IntegrityError', 'Error', 'InterfaceError', 'DatabaseError', 
'OperationalError']


No puedes asegurar dónde están definidas estas excepciones, si las define el 
propio módulo o si se las apropia, pero al menos te puede dar una idea de por 
dónde va la cosa. Por poner un contraejemplo, el módulo "math" no define 
ninguna excepción de todas las que usa, por lo que de nada sirve en este caso 
la introspección.
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.python.org/pipermail/python-es/attachments/20090827/34c64780/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es