python: импорт модулей с неправильными операторами импорта => неисчерпывающая информация из результирующего ImportError - PullRequest
1 голос
/ 19 мая 2010

У меня есть забавная проблема, о которой я хотел бы спросить вас, ребята (nals).

Я импортирую некоторый модуль A, который импортирует некоторый несуществующий модуль B. Конечно, это приведет к ошибке ImportError.

Вот так выглядит A.py

import B

Теперь давайте импортируем A

>>> import A
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/importtest/A.py", line 1, in <module>
  import B
ImportError: No module named B

Хорошо, к проблеме. Как я могу узнать, является ли это ImportError результатом импорта A или какого-либо поврежденного импорта внутри A без проверки строкового представления ошибки.

Разница в том, что либо A не существует, либо введены неверные операторы импорта.

Надеюсь, вы поможете мне ...

Приветствия BB

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

В стандартной библиотеке lib есть модуль imp, поэтому вы можете сделать:

>>> import imp
>>> imp.find_module('collections')
(<_io.TextIOWrapper name=4 encoding='utf-8'>, 'C:\\Program Files\\Python31\\lib\\collections.py', ('.py', 'U', 1))
>>> imp.find_module('col')
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    imp.find_module('col')
ImportError: No module named col

, который вызывает ImportError, когда модуль не найден. Поскольку он не пытается импортировать этот модуль, он полностью не зависит от того, будет ли ImportError повышен этим конкретным модулем.

И, конечно, есть imp.load_module для фактической загрузки этого модуля.

0 голосов
/ 19 мая 2010

Вы также можете посмотреть на обратную трассировку, которую можно проверить в коде.

Однако, почему вы хотите выяснить - в любом случае А не сработает.

...