[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