Come faccio a distinguere “modulo non trovato” da “modulo gettato eccezione” su ImportError?

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

  •  13-09-2019
  •  | 
  •  

Domanda

In Python, import does_not_exist solleva ImportError, e

import exists

exists.py:

import does_not_exist

sarà anche aumentare ImportError.

Come faccio a capire la differenza nel codice?

È stato utile?

Soluzione

L'unico metodo che conosco è quello di verificare se il modulename toplevel "esiste" è nel messaggio del eccezione o no:

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

Potrebbe essere questa una richiesta di funzionalità per ImportError di Python? Avere una variabile per il nome del modulo sarebbe certamente comodo ..

Altri suggerimenti

È possibile utilizzare il tb_next del traceback. Sarà diverso da Nessuno se l'eccezione si è verificato su un altro modulo

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top