Como faço para distinguir “módulo não encontrado” de “módulo jogou exceção” na ImportError?
-
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?
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