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)

0 件のコメント:

コメントを投稿