2017-11-22 4 views
0

Ich suche so etwas zu tun, aber ich mag die Ausnahme in einer Art und Weise zu erhöhen, dass, wenn ich pdb verwende, es mich in der risky_func fallen wirdRe-Raise in ursprünglichem Kontext für Debugging-Zwecke

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 

Das einzige, was ich denken kann, setzt die try/catch in risky_func und Leiten der Debug-Parameter, aber das wäre wirklich unelegant

+0

Wenn Sie Konsole Debugging möchten, sollten Sie versuchen, 'Pudb' – aliva

+0

Wie wäre es mit' finally' Block? –

Antwort

0

Wenn Sie raise e verwenden, kann Python nicht wissen, ob e ist etwas neues oder immer noch die gleiche Ausnahme wie zuvor. Wenn Sie einfach nur raise verwenden, wird dieselbe Ausnahme wie beim letzten Mal erneut ausgelöst.

Das gleiche Konzept existiert in anderen Sprachen, z.B. C#. Vergleichen Sie throw e; und throw; (ohne e).

Sowohl Python als auch C# weisen der Ausnahme einen neuen Stack-Trace zu, wenn Sie e verwenden. Es wird den ursprünglichen Stacktrace ohne e verwenden.

Verwandte Themen