8

これは私のファイル構造です:

[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

これには1つの問題があります。モジュール自体にインポート例外が含まれている場合、optionalそれはサイレントに失敗します。モジュールからの例外をサイレンシングせずにオプションのモジュールをインポートする方法はありますか?


これはあいまいなシナリオのように思えるかもしれませんが、沈黙した例外のために厄介なエラーが発生しました。今後、それが発生しないようにしたいと思います。

4

1 に答える 1

8

これは少しハックですが、例外のメッセージをチェックして、何が失敗したかを判断できます。

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

このコードでは、オプション モジュールのインポートに失敗した場合は無視されますが、それ以外で例外が発生した場合 (別のモジュールのインポート、構文エラーなど) は発生します。

于 2012-01-16T15:13:47.060 に答える