私はimportlib.import_module("somemodulename")
を呼び出して、カスタマイズされたユーザー定義のカスタムモジュールをインポートしています。このインポートは失敗する可能性があります。なぜ私はトレースバックを印刷する必要があるので、それが失敗した理由についての情報をユーザに与えたいが、それはimportlib
モジュールからの非常に長い行に満ちている傾向がある。例えば、それは:トレースバックの先頭から複数の行を削除します
Traceback (most recent call last):
File "C:\abc\cde\efg\importer.py", line 101, in load
self.__module = importlib.import_module(self.__name)
File "C:\Programming\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "C:\abc\cde\efg\modules\testerror.py", line 3, in <module>
x = 1/0 # intentional error for module testing purposes
ZeroDivisionError: division by zero
です。明らかに、ほとんどの行はユーザーにとって関心がありません。 (これは将来のバージョンで変更することがあり、実装の詳細である、かもしれ
Traceback (most recent call last):
File "C:\abc\cde\efg\modules\testerror.py", line 3, in <module>
x = 1/0 # intentional error for module testing purposes
ZeroDivisionError: division by zero
をしかし、問題は、私はimportlib
パッケージから生成された行の数に頼ることができないということです。私は、トレースバックは次のようになりたいですプラットフォームやPythonのインストールに固有のものです)、私はスキップしたいカスタムモジュールのエラー(彼は自分自身でいくつかの他のモジュールをインポートすることができますエラーの原因となる可能性があります)によって生成された行の数も、それをさらに複雑にするために、ユーザーはimportlib
モジュール機能を呼び出すこともできます。この場合、トレースバックに含める必要があります。
つまり、トレースバックからのエラー行importlib
のすべての最初のブロックを取り除く必要があります。トレースバックラインの構文解析以外のアイデアは、importlib
パッケージの実装の詳細が多すぎるため、巧妙で壊れやすいソリューションになると思いますか?
注:私は、Python 3.5+を使用しています、ソリューションはプラットフォームに依存しない
[traceback](https://docs.python.org/3/library/traceback.html)モジュールをご覧ください。 – direprobs