Как отличить «модуль не найден» от «модуль выдал исключение» в ImportError?

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

  •  13-09-2019
  •  | 
  •  

Вопрос

В Python, import does_not_exist поднимает ImportError, и

import exists

exists.py:

import does_not_exist

также поднимет ImportError.

Как мне определить разницу в коде?

Это было полезно?

Решение

Единственный известный мне метод - проверить, существует ли имя модуля верхнего уровня в сообщении исключения или нет:

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

Может ли это быть запрос на функцию ImportError Python?Конечно, было бы удобно иметь переменную для имени модуля.

Другие советы

Вы можете использовать tb_next обратной трассировки.Оно будет отличаться от «Нет», если исключение произошло в другом модуле.

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top