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