Во время выполнения код Python получает имя подмодуля для загрузки, чего я раньше не знал.Теперь я хочу проверить, существует ли этот подмодуль внутри существующего модуля.Рассмотрим эту структуру, где можно указать foo
и bar
:
master/
|
|- __init__.py
|
|- foo/
| |
| |- __init__.py
|
|- bar/
|
|- __init__.py
Теперь обычно я делаю это, что работает для def и переменных:
import master
unknown_submodule = "foo"
if hasattr(master, unknown_submodule):
pass # all's well
или IЯ ловлю AttributeError, которая работает одинаково.
Однако, с вышеупомянутой файловой структурой, я не могу использовать этот подход и работать.hasattr()
всегда возвращает False (то есть всегда генерируется ошибка AttributeError).
Если я посмотрю на dir(master)
, я увижу этот вывод:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
и даже явно указав__all__
в master/__init__.py
не помогает, но изменяет dir () на
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
Любая идея, что я делаю не так, или если есть способ выполнить такие тесты?(Кстати: Python 2.6 на Win / Cygwin, если это интересно)