2010-06-08 2 views
2

누락되었습니다파이썬 : sys.exc_info()는이 같은 예외를 캐치 코드를 파이썬에서 지역 변수

try: 
    <do stuff> 
except: 
    exc_info = sys.exc_info() 

내가 실행 해요 문제는 그 역 추적 객체 (exc_info [ 2])는 traceback 객체에서 비 결정적으로 누락 된 지역 변수입니다. 나는 똑같은 코드를 실행하고 때로는 변수가 tb.tb_frame.f_locals에 있고 때로는 그렇지 않기 때문에 이것을 사실로 알고 있습니다. 전역 변수는 tb.tb_frame.f_globals에서 항상 정확합니다.

f_locals 구조를 채우는 것은 무엇입니까? 지역 변수 사전이 때때로 비어있는 원인은 무엇입니까?

+1

코드에 비 결정 성이 있어야하는 것처럼 들립니다. 실? 네트워크 I/O? 아무것도? –

+1

Ned와 동의합니다. tb_frame은 실제로 호출 코드의 프레임이며, 변수가 없으면 설정되지 않습니다. 글쎄, re-raised 예외는 tb 객체를 유지하므로 프레임이 여러분이 생각하는 범위를 가리키고 있지 않을 수도 있습니다. –

답변

0

현지인은 로컬 컨텍스트의 코드에 완전히 의존합니다. 예를 들어 :

if condition: 
    foo='foo' 
else: 
    bar='bar' 

condition==True 경우는 foolocals()에있을 것입니다 및 bar, 그렇지 않으면 barlocals()에있을 것입니다하지 않으며 foo는하지 않습니다.