Импорт дополнительного модуля - PullRequest
7 голосов
/ 16 января 2012

Это моя файловая структура:

[mylibrary]
    __init__.py 

    [codecs]
        __init__.py < this is the file that we're talking about
        optional.py

Теперь у меня есть этот код в отмеченном __init__.py:

def load_optional_codecs():
    try:
        from mylibrary.codecs import optional
        # do stuff with optional
    except ImportError:
        pass

Есть одна проблема с этим. Если модуль optional содержит само исключение при импорте, произойдет сбой. Есть ли способ импортировать дополнительный модуль, не отключая никаких исключений из модуля?


Это может показаться неясным сценарием, но я получил неприятную ошибку из-за исключенного молчания, и я хотел бы предотвратить это в будущем.

1 Ответ

8 голосов
/ 16 января 2012

Это немного странно, но вы можете проверить сообщение об исключении, чтобы определить, что не удалось:

try:
    from mylibrary.codecs import optional
except ImportError, e:
    if e.message != 'No module named optional':
        raise

С этим кодом, если импорт дополнительного модуля завершается неудачей, он игнорируется, но если что-то вызывает исключение (импорт другого модуля, синтаксические ошибки и т. Д.), Он будет вызван.

...