2016-07-06 5 views
1

sys.exc_info()은 튜플 (유형, 값, 추적)을 반환합니다.
그래서 sys.exc_info()[2]은 우리의 추적 대상입니다.exc_traceback이 반환하는 이유 없음

import sys 

try: 
    1/0 
except ZeroDivisionError: 
    print sys.exc_info()[2].tb_frame.f_back 

tb_frame 및 f_back 사용은 여기에서 설명하고있다 : 어떤 외부 프레임이없는 None때문에 Frame Objects

+1

추적에는 추적 기능이 있습니다. 그렇지 않으면'AttributeError'가 발생하지만 추적 기능의 프레임에는'f_back'이 없습니다. 그것은 나에게 완벽하게 합리적인 것 같습니다. 이것을 직접 실행한다면 * 어떤 외부 프레임을 기대하고 있었습니까? * – jonrsharpe

+0

라인 269 표준 라이브러리의 traceback.py 모듈에서 same : tb_frame.f_back이 사용되었습니다. – Heartagramir

+0

그건 내 질문에 정말로 답하지 않습니다. * 왜 외부 프레임이있을 것이라고 생각 했습니까? – jonrsharpe

답변

2

당신은 볼이이 코드와 예외 역 추적을 캐치하지 않았던 이유는

. 이것을 직접 실행하므로 현재 프레임이 마지막 프레임입니다. , 두 번째 경우

$ python demo.py 
None 

$ python caller.py 
<frame object at 0x10bc34c20> 

: 익숙 할 것이다

import sys 

try: 
    1/0 
except ZeroDivisionError: 
    print sys.exc_info()[2].tb_frame.f_back 

, 그리고 사소한 caller.py :

import demo 

지금의 차이를 볼이를 설명하기 위해, 나는 demo.py를 생성 외부 프레임 (예 : caller.py)이있는 경우 None이 표시되지 않습니다.

+0

글쎄, 당신의 의견은 해결책과 같았습니다 ... 제 질문은 저의 프레임 지식에 대한 저의 결과였습니다. 이제 프레임을 더 명확하게 알게되었습니다 ... 솔루션을 편집하고 다른 프레임에서 프레임 및 f_back 사용에 대한 정보를 추가하는 것이 좋습니다. – Heartagramir

+0

@Heartagramir 정확히 "* 다른 프레임에서 프레임 및 f_back 사용에 대한 정보를 추가"*할까요? 내가 대답 할 수있는 구체적인 질문이 있으십니까? 불분명 한 점은 무엇입니까? – jonrsharpe

+0

모든 것이 나에게 분명합니다. 다시 한 번 제안을 주신 덕분이었습니다. – Heartagramir