[Python-es] Saber si un modulo existe aunque contenga un error ImportError.
Txema Vicente
txema en nabla.net
Sab Oct 6 00:56:55 CEST 2012
Buenas.
Acabo de topar con un detalle que no se me ocurre como resolver. En
resumen, quiero poder distinguir entre estas dos situaciones:
1.- Excepcion ImportError porque un modulo no existe.
2.- Excepcion ImportError porque el modulo existe pero al
importarlo tiene un error dentro, del tipo ImportError
Ideas?
Detalles:
Estoy haciendo un toolkit en App Engine, y tengo un paquete "call" en el
que voy metiendo modulos que se encargan de responder peticiones HTTP.
Básicamente si se llama a http://...//call/hello/world, se mira a ver si
existe un modulo call.hello.world, y si es asi se importa y la respuesta
la da su método main().
Si hay un error en el modulo, la respuesta es el traceback.
Si no existe el modulo, se va probando hacia arriba "call.hello" y
finalmente call.main() dice que no tiene respuesta para esa ruta.
Esto es un trozo de la clase que hace esto:
@route(r'/pyojo/<command:(.*)>', "call")
class Command(Request):
def __module(self, command):
code = None
try:
module = import_call(command)
code = module.main(self)
except ImportError: pass #<---- Problema si el modulo si que
existe
except Exception:
code = Config.log_exception(command)
return code
Y esta es la funcion para importar, que funciona bien:
def import_call(name, module=".call"):
name = module+"."+name
mod = __import__(name)
components = name.split('.')
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
Salud.
Más información sobre la lista de distribución Python-es