Re: Saber que excepciones lanza una función

Chema Cortes <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Organization ch3m4.org
Message-ID <[email protected]>
>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.

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
signature.asc (application/pgp-signature, 190 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (GNU/Linux)

iD8DBQBKlhOTa1V4BoHtm6IRAq1gAJ0SaP5NUvDQXirxA/CN3JmC6imK/wCgu2dN
UnHBqIjsId/A4fspq/mCpFs=
=PAH4
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.