2010-01-22 2 views
1

내 코드를 epydoc에로드하고 최상위 모듈을로드하면 다음과 같이 실패합니다.코드를로드 할 때 epdoc에서 스택 트레이스를 얻으려면 어떻게해야합니까?

Error: TypeError: 'NoneType' object is not callable (line 10) 

여기서 참조하는 NoneType은 9 행에로드하려고했던 하위 모듈입니다. 어떻게 얻을 수 있습니까? epydoc을 사용하여 9 번 줄에 모듈을로드 할 수없는 이유를 설명하고 오류를 범하는 대신에?

nosko 님의 요청에 따라

# foo.py 
import bar 
bar.baz() 

# bar.py 

def baz(): 
    print 'baz' 

import os 
os.environ['DOES_NOT_EXIST'] 

함께 실행 :

python2.6 epydoc --html foo.py 

유용보다 덜 생산 : 실패는에

 
    +-------------------------------------- 
    | In /home/ross/foo.py: 
    | Import failed (but source code parsing was successful). 
    |  Error: KeyError: 'DOES_NOT_EXIST' (line 1) 
내가 epydoc 말해 할을 것을 여기에 스택 트레이스가 주어지지 유사한 예이며, bar.py의 라인 6. 나는 그것이 bar.pyfoo.py 수입에 관하여 불평하기를 원하지 않는다. 작은 예제에서 의 특정 문제를 재현 할 수는 없지만, 근본적인 요청은 epydoc이 실패 할 때 스택 추적을 인쇄하여 문제를 지적하기를 원합니다. 사전에 하위 모듈을로드하는지 아니면 키를 찾지 못하는지 여부

참고 :이 문제의 근본 원인은 다른 환경 설정 문제가있는 SCons에 대한 입력입니다. 그것이 epydoc에서 실행될 때 작동하지 않지만 scons -f SConstruct.py을 실행할 때 스크립트가 여전히 작동하는 이유입니다. 또한 sphinx로 문서를 생성하려고합니다. sphinx으로 실행할 때 실제로 스택 추적을 보여줍니다. 어쩌면 sphinx과 함께 갈 것입니다 ...

+1

코드를 제공하거나 문제를 재현하는 스 니펫을 제공합니다. – nosklo

+0

문제를 격리 할 수 ​​있다면 문제를 진단하는 데 스택 추적이 필요하지 않습니다. 나는 더미 예제를 요리하려고 노력할 것이다. 그러나 최종 목표는'epydoc'의 stacktrace입니다. 모듈을 가져올 수 없을 때 epydoc이 심하게 실패하기를 원합니다.은폐하지 않고 새롭고 이상한 방식으로 실패 할 때까지 계속하십시오. (그 행동은 perl처럼 들립니다. * shudder *) –

답변

2

그래서 내가 제대로 이해한다면, epydoc을 실행하고있는 모듈은 오류가있는 모듈을 가져오고 (모듈을 만들지는 않는다)?

오류가있는 파일의 행을 디버그 할 수 있도록하려면이 파일도 전달하면됩니다. 오류가 발생한 행 번호는 으로 표시됩니다. 모듈.

은 그래서, 실행 :

epydoc --check foo.py bar.py 

윌 출력 : Bar.py 이후

+------------------------------------------------------------------------------------------------------------ 
| In /home/mark/Desktop/foo.py: 
| Import failed (but source code parsing was successful). 
|  Error: KeyError: 'DOES_NOT_EXIST' (line 2) 
| 
+------------------------------------------------------------------------------------------------------------ 
| In /home/mark/Desktop/bar.py: 
| Import failed (but source code parsing was successful). 
|  Error: KeyError: 'DOES_NOT_EXIST' (line 7) 
| 

도 분석은 오류가이 파일에 발생한 행 번호가 표시됩니다.

일반적인 문제이므로 더 강력한 솔루션을 찾고 있다면 epydoc 내부를 해킹하기 시작해야 할 것입니다. 너 자신 할 수만 있으면이 토끼 구멍을 막지 말라고 조언 해 줄거야. Sphinx으로 전환하는 것이 옵션 인 경우이 경로를 권하고 싶습니다.

+0

Thanks Mark. reST 텍스트는 약간 협박적이지만, 나는 스핑크스에 지금 기울어 져 있다고 생각한다. 내가 스핑크스에서 똑같은 운동을했을 때, 그것은 나에게 스택 트레이스를 주었고 오류가있는 * 올바른 줄을 지적했다. –

+2

Sphix = 더 높은 학습 곡선이지만 더 강력 함 epydoc = 학습 곡선이 훨씬 낮지 만 평소와 다르게 사용해야하는 경우 (이 추가 정보를 보여주는 경우) 벽에 두드리는 소리가납니다. 나는 장기간에 걸쳐 시간을 절약 할 수 있기 때문에 스핑크스를 추천 할 것입니다. 필자는 Python 문서에서 소스에서 구문을 비교하고 비교하는 방법을 모르는 항목을 확인하는 것이 도움이된다는 것을 알았습니다. –

관련 문제