5

そこで、インデクサーを持つこのクラスを開発しています。IndexError 例外をスロー (または Python 用語で「レイズ」) したいと考えています。まあ、それはかなり些細なことですが、

if errorCondition:
    raise IndexError("index out of range")

ただし、このコードをコンソールで実行してエラーが発生すると、スタック トレースにはエラーが発生した行も含まれます。

Traceback (most recent call last):
  File "code.py", line 261, in <module>
    print myCards[99]
  File "Full/Path/To/The/module.py", line 37, in __getitem__
    raise IndexError("item index out of range")
IndexError: item index out of range

私はこの種の奇妙なことを見つけました。外部モジュールから抽出されたファイル、行、およびコードに関する情報を提供するのではなく、クラスの内部動作を実装者から隠したいと思います。

これを管理する方法はありますか?エラーを発生させるポイントは、外部コード内のどこでエラーが発生したかではなく、関数呼び出しがなぜ失敗したかを説明するのに十分な情報を提供することです。

4

1 に答える 1

5

コードを .pyc バイトコード ファイル (通常はモジュールの最初のインポート時に自動生成) として配布する場合、または生成された .pyc ファイルが .py ソース ファイルへの正しいパスを持たないように工夫する場合 (ソースを移動/削除することによって)ファイル)、スタック トレースはソース コード行を省略します。

compileallstdlib モジュール を使用して、バイトコード ファイルの生成方法を制御できます: http://docs.python.org/2/library/compileall.html

コメンテーターが指摘したように、これは珍しいことです。追加情報により、生産上の問題をデバッグするための貴重な時間を節約できます。

于 2013-03-16T12:59:30.133 に答える