1

コードをepydocロードして最上位モジュールをロードすると、次のように失敗します。

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

それが参照している は、9 行目にロードしようとしたサブモジュールです。epydocNoneTypeに、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

役に立たないものを生成します:

    +----------------------------------------------------
    | | /home/ross/foo.py で:
    | | インポートに失敗しました (ただし、ソース コードの解析は成功しました)。
    | | エラー: KeyError: 'DOES_NOT_EXIST' (1 行目)
失敗が の 6 行目にあることを epydoc に教えてもらいたいですbar.pyfoo.pyの のインポートについて不平を言いたくありませんbar.py小さな例で特定の問題を再現することはできませんが、私の基本的な要求は、epydoc が失敗したときに、スタック トレースを出力して問題を指摘することです。サブモジュールをロードしているか、辞書でキーが見つからないかを呼び出します。

注: この問題の根本は、私が文書化しようとしているコードが、さまざまな環境セットアップの問題を持つ SCons への入力であることです。そのため、実行するepydocと機能しませんが、で実行するとスクリプトは引き続き機能しますscons -f SConstruct.py。でドキュメントを生成しようとしていsphinxます。sphinx実際に実行すると、スタックトレースが表示されます。多分私は一緒に行くでしょうsphinx...

4

1 に答える 1

2

私が正しく理解していれば、epydocを実行しているモジュールは、エラーのあるモジュールをインポートします(ドキュメントを生成したいモジュールではありません)?

エラーが発生したファイル内の行を確認してデバッグできるようにするだけでよい場合は、このファイルも渡すことができ、エラーが発生した行番号がそのモジュールに対してリストされます。

したがって、次を実行します。

epydoc --check foo.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)
|   

Bar.pyも解析しているので、このファイルでエラーが発生した行番号が記載されています。

これは対処する必要がある一般的な問題であるため、より堅牢なソリューションを探している場合は、epydoc内部のハッキングを開始する必要があります。私自身もそうしましたが、できればこのうさぎの穴に落ちないようにアドバイスします。Sphinxへの切り替えがオプションである場合は、このルートをお勧めします。

于 2010-01-23T01:08:59.573 に答える