1

私は、テストするファンクションを単に与えることができるテスト/ファジィングライブラリを作成しました。ライブラリは、機能を破壊するものを見つけるための自動テストを生成し、機能を高信頼性にするための適切な手順を実行できます。Pythonで例外を発生させる前にトレースバックをスライスするにはどうすればよいですか?

heres the link to battle_tested

プロジェクトが成功であることが判明回していると、それは私はそれが何を望むかやって本当に便利です。私が実行している問題は、問題が見つかったときのトレースバックのサイズです。このライブラリは完全に機械化された方法でテストを作成するので、テストされた関数は5または6レベルを私のライブラリに吹き飛ばします。これにより、トレースバックの80%が、テストされた関数に到達して関数のどの行が爆破されたかを示す前に、ライブラリを介した何も別の呼び出しではありません。

heres a link to a small demo that demonstrates how large the traceback is

私の質問:私は例外を発生させる前に、それだけで私のライブラリの外のステップが表示されますので、トレースバックをスライスする方法はありますか?私は本当にこのテストライブラリのユーザーフレンドリーにしようとしています。そして、広範で判読不可能なトレースバックは、ライブラリが何をしているのかをまだ分かっていない人を使って試してみた人々の苦労するようです。

ご協力ありがとうございます。

答えて

2

あなたはいつも)(traceback.format_excを使用することができます分割線を()リストを作成する:。

#!/usr/bin/env python3 
import traceback 


def thing_that_will_blowup(): 
    assert False is True 


def catch_it_blowup(): 
    try: 
     thing_that_will_blowup() 
    except AssertionError: 
     exception_data = traceback.format_exc().splitlines() 
     for index, line in enumerate(exception_data): 
      if 'File' in line and os.path.basename(__file__) in line: 
       print("{} - {}".format(index, line)) 
       print("{} - {}".format(index + 1, exception_data[index + 1])) 


if __name__ == "__main__": 
    catch_it_blowup() 

リターン:

1 - File "split_stacktrace.py", line 11, in check_it_blowup 
2 -  thing_that_will_blowup() 
3 - File "split_stacktrace.py", line 6, in thing_that_will_blowup 
4 -  assert False is True 

あなたはまだ、そこから特定し、スライスする必要があります。

関連する問題