2012年1月29日日曜日

python:ドキュメント作成ツール pydoc(1)


pydocは、pythonソースから説明資料を作成するツールです。
pythonソース、クラス、関数のヘッダ部分のコメントからhtml版使用手引きを作成できます。


出力例)


keisan
index
c:\python26\user\keisan.py
keisan.py

○概要
計算モジュール
○修正履歴
20120102 新規作成
20120130 testクラス追加


Modules
      
sys

Classes
      
test

class test
    テスト
Properties
        wa:     たし算の結果
 
Methods defined here:
__init__(self)
#コンストラクタ
wa(self, L)

Functions
      
main()
tasizan(L)
たし算
Args:
        L:      値のリスト
Returns:
        和
Attentions:
        値が数値以外の場合、Falseを返却
Samples:
        >>> tasizan([1, 2])
        3
        >>> tasizan(["a", 2])
        False


上記を作成した元のpythonソースは以下のとおりです。



# -*- encoding=sjis -*-
"""
keisan.py


○概要
計算モジュール
○修正履歴
20120102 新規作成
20120130 testクラス追加


"""
import sys
class test():
"""テスト
Properties
wa: たし算の結果
"""
#コンストラクタ
def __init__(self):
self.wa = 0

def wa(self, L):
self.wa = tasizan(L)

def tasizan(L):
"""たし算
Args:
L: 値のリスト
Returns:

Attentions:
値が数値以外の場合、Falseを返却
Samples:
>>> tasizan([1, 2])
3
>>> tasizan(["a", 2])
False
"""
if not isinstance(L, list): return False
for i in L:
if not i.isdigit(): return
return sum(L)

def main():
m = sys.argv[1:] #引数の配列

#関数を直接呼ぶ方法
print "tasizan : ", tasizan(m)

#クラスを使う方法
p = test()
print p.wa(m)

if __name__ == '__main__': main()



次回はpydocをどのように使ったら上記のhtmlドキュメントのできるかをお知らせします。 

2012年1月2日月曜日

python:単純バグ発見ツール pychecker(2)


前回でpycheckerの準備ができたので使ってみます。
まず正常な状態のpythonソースをチェックしてみます。
引数の合計を計算するプログラム(keisan.py)です。


# -*- encoding=sjis -*-
import sys
def tasizan(L):
if not isinstance(L, list): return False
return sum(L)

def main():
m = sys.argv[1:]
print "tasizan : ", tasizan(m)

if __name__ == "__main__": main()




正常時のチェック結果
Processing module keisan (C:\Python26\user\keisan.py)...


Warnings...


None




上記を少し変えて警告(warning)が出るようにしてみます。


・2行目で使わないモジュールosをインポートした場合、
「使われていません」とチェックされます。
import sys,os

[system path]\user\keisan.py:2: Imported module (os) not used


・8行目で値設定前のmを参照した場合、
「設定前に使われている変数」とチェックされます。
print m

[system path]\user\keisan.py:8: Variable (m) used before being set


さらに文法ミスをしてみます。
・5行目の行頭でタブキーを余分に打って、インデントがずれている場合、
 「予期しないインデント」とチェックされます。
  Caught exception importing module keisan:
    File "C:\Python26\Lib\site-packages\pychecker\pcmodules.py", line 540, in setupMainCode()
      module = imp.load_module(self.moduleName, handle, filename, smt)
  IndentationError: unexpected indent (keisan.py, line 5)


Warnings...


[system path]\user/keisan.py:1: NOT PROCESSED UNABLE TO IMPORT


・5行目で命令語を入力ミスした場合、「文法上無効」とチェックされます。
 
Processing module keisan (C:\Python26\user\keisan.py)...
  SyntaxError: invalid syntax (C:\Python26\user\keisan.py, line 5)
        rreturn sum(L)