2

Python モジュールが存在する場合はインポートしたいのですが、存在ImportErrorしない場合は無視します。ただし、インポートされたモジュール自体が を発生させた場合ImportError、このエラーも無視されます。これは私が必要とするものではありません (つまり、モジュールが存在するバグがある場合、知りたいです)。

for app in INSTALLED_APPS:
    try:
        module = __import__('{}.mycustommodule'.format(app))
        # Do something with it
    except ImportError:
        traceback = sys.exc_info()[2]
        if ( ? ):  # if the exception occurred in app.mycustommodel, raise
            raise
        pass       # otherwise, ignore

ドキュメントでsys.exc_infotracebackを確認しましたが、有用な情報は見つかりませんでした。これはどのように行うことができますか?

4

1 に答える 1

4

例外をキャッチしている同じ関数で例外が発生した場合、スタック トレースには 1 つのフレームしかありません。そうしないと、複数のフレームが作成されます。関連する質問を見て、いくつかのテストを行った後、次のことを確認するだけで十分であることがわかりましtb_nextNone

except ImportError:
    traceback = sys.exc_info()[2]
    if ( traceback.tb_next ):
        raise
    pass

注:に関するドキュメントtb_nextは不足していますが ( のドキュメントでそれへの参照を見ましたがinspect、トレースバックの「レベル」を構成するものを指定するものは何もありません)、上記の動作はPython 2.7.3Python 3.2.3、 Jython 2.5.3の間で一貫しています。 、IronPython 2.7.3 および PyPy 1.8.0。

于 2013-02-15T22:35:01.987 に答える