2017-11-22 19 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 
내가 생각할 수있는

있는 유일한 방법은 risky_func의 시도/캐치를 넣고 여기에 디버그 매개 변수를 전달하지만, 이것은 당신이 raise e 사용하는 경우, 파이썬은 e 새로운 것을인지 알 수 없다

+0

콘솔 디버깅을 원하면'pudb'를 시도해야한다고 생각합니다. – aliva

+0

'finally' 블록 사용은 어떻습니까? –

답변

0

정말 우아이거나 것입니다 이전과 같은 예외입니다. raise 만 사용하면 마지막으로 다시 동일한 예외가 발생합니다.

같은 개념이 다른 언어로 존재합니다 (예 : 기음#. throw e;throw; (e 제외)을 비교하십시오.

e을 사용하면 Python과 C# 둘 다 예외에 대한 새 스택 추적을 할당합니다. e없이 원래 스택 트레이스를 사용합니다.