2013-02-15 2 views
2

파이썬 모듈이있는 경우 가져오고 싶지만 ImportError은 무시하십시오. 그러나 가져온 모듈 자체가 ImportError을 발생시키는 경우에도이 오류는 무시됩니다. 즉, 모듈 이있는 경우이 있지만 이라는 버그가 있습니다. 알고 싶습니다.) 가져온 모듈에서 ImportError 감지

for app in INSTALLED_APPS: 
    try: 
     module = __import__('{}.mycustommodule'.format(app)) 
     # Do something with it 
    except ImportError: 
     traceback = sys.exc_info()[2] 
     if (?): # if the exception occurred in app.mycustommodel, raise 
      raise 
     pass  # otherwise, ignore 

나는 sys.exc_infotraceback에 대한 문서를 확인하지만 유용한 정보를 찾지 못했습니다. 어떻게 할 수 있습니까?

답변

4

예외를 catch하는 동일한 함수에서 예외가 발생하면 스택 추적에는 하나의 프레임 만 있습니다. 그렇지 않으면 다중 프레임을 갖게됩니다. related questions보고 몇 가지 검사를 한 후, 나는 그것이 tb_nextNone 있는지 확인하기 위해 충분 발견 :

except ImportError: 
    traceback = sys.exc_info()[2] 
    if (traceback.tb_next): 
     raise 
    pass 

참고 : tb_next에 대한 문서가 부족하지만 (inspect의 문서에 대한 참조를 보았다, 그러나 무엇이 추적 "레벨"을 구성 하는지를 지정하지 않음) 위의 동작은 Python 2.7.3, Python 3.2.3, 자이 썬 2.5.3, IronPython 2.7.3 및 PyPy 1.8.0 사이에서 일관됩니다.

+1

문서화되어 있지 않은 경우 구현 및/또는 릴리스에 따른 것일 수 있습니다. – martineau

+0

@martineau 좋은 지적, 나는 이것을 조심 할 것이다! 몇 가지 다른 환경 (CPython, PyPy)에서 테스트하고 차이점이 있는지 확인할 수 있습니다. – mgibsonbr

관련 문제