7

重複の可能性:
例外スタックにPythonのraise-lineを表示しない

などの組み込みの例外NameErrorにより、コード内で例外が発生したポイントまでのトレースバックが得られます。私はユーティリティモジュールに取り組んでいますが、モジュールを使用するコードが発生して例外が発生した場合、例外の前のトレースバックの最後のものが私のraise WhateverErrorです。

Pythonで例外を発生させ、tracbackに組み込みの例外(cコードを記述せずに)の1フレーム上で停止させる方法はありますか?

4

1 に答える 1

3

純粋なPythonは、既存のトレースバックオブジェクトを変更したり、任意のトレースバックオブジェクトを作成したりする方法を提供しません。

>>> exc_info[2].tb_next = None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: readonly attribute

>>> types.TracebackType()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot create 'traceback' instances

これを行うことができれば、トレースバックのデフォルトのフォーマットに影響を与えるだけでなく、ユーティリティモジュールの事後エラーをpdbを使用する人々の能力にも干渉することに注意してください。

トレースバックがログに記録されているか、ユーティリティモジュールによってフォーマットされている場合は、興味がないと思われるフレームを出力に含めることはできません。たとえば、標準ライブラリのunittestモジュールは、テストの実行中に発生したエラーを報告するときにこれを行います。

于 2011-06-20T12:44:35.563 に答える