2017-11-22 6 views
0

デバッグ目的のために私はこのような何かを探していますが、私はPDBを使用していたときに、それはrisky_funcは元のコンテキストで再調達

def outer_func(debug=True): 
    for i in some_lst: 
     try: 
      risky_func(i) 
     except Exception as e: 
      if debug: 
       raise e # go back to risky_func context in stack where exception originally occurred 
       # alternatively: pdb.set_trace(), but also going back to risky_func context 
      else: 
       pass 
で私をドロップしますような方法で例外を発生させたいですあなたが raise eを使用する場合は、Pythonは eが何か新しいものかであるかを知ることができない私は考えることができる唯一のことは、risky_funcでのtry/catchを入れ、そこにデバッグパラメータを渡している

が、これは本当に洗練だろう

+0

コンソールのデバッグをしたい場合は、 'pudb'を試してください。 – aliva

+0

' finally'ブロックの使い方はどうですか? –

答えて

0

これまでと同じ例外があります。 raiseを単独で使用すると、前回と同じ例外が再び発生します。

他の言語でも同じ概念が存在します。 C#。 throw e;throw;eなし)を比較してください。

eを使用すると、PythonとC#の両方が新しいスタックトレースを例外に割り当てます。 eなしで元のスタックトレースを使用します。

関連する問題