Как отличить «модуль не найден» от «исключение модуля сгенерировано» в ImportError? - PullRequest
1 голос
/ 07 декабря 2009

В Python import does_not_exist повышает ImportError и

import exists

exists.py

import does_not_exist

также повысит ImportError.

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

Ответы [ 2 ]

3 голосов
/ 07 декабря 2009

Единственный метод, который я знаю, это проверить, существует ли в сообщении Исключения полное имя модуля «существует»:

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

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

2 голосов
/ 07 декабря 2009

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

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
...