Como faço para distinguir “módulo não encontrado” de “módulo jogou exceção” na ImportError?

StackOverflow https://stackoverflow.com/questions/1860363

  •  13-09-2019
  •  | 
  •  

Pergunta

Em Python, import does_not_exist levanta ImportError, e

import exists

exists.py:

import does_not_exist

também irá levantar ImportError.

Como devo dizer a diferença no código?

Foi útil?

Solução

O único método que eu sei é para verificar se o modulename toplevel "existe" é a mensagem da exceção ou não:

try:
  import exists
except ImportError as exc:
  if "exists" in str(exc):
     pass
  else:
     raise

Este poderia ser um pedido de recurso para ImportError do Python? Ter uma variável para o nome do módulo certamente seria conveniente ..

Outras dicas

Você pode usar o tb_next do rastreamento. Será diferente de None se a exceção ocorreu em outro módulo

import sys
try:
    import exists
except Exception, e:
    print "None on exists", sys.exc_info()[2].tb_next == None

try:
    import notexists
except Exception, e:
    print "None on notexists", sys.exc_info()[2].tb_next == None

>>> None on exists False
>>> None on notexists True
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top