「PyScripter で UnitTest を自動で生成」の続き。
次の 4 つの仕組みがあるおかげで、プログラムを書くことができると言っても過言ではない。
- assert 文 でメソッドの事前条件をチェック。
- UnitTest でメソッドの結果をチェック。
- logging でおかしな値をログに出力。
- デバッガで動作を追う。
一画面に納まる程度のスクリプトなら大丈夫だけれど、それ以上になると、もうダメなすぐに忘れる脳みそ。 (+_+) 上記の仕組みを作ってくれた人に感謝・感謝。 ^人^ それプラス軽くて使いやすい IDE、 Pyscripter があるから Python でスクリプトを書く気になれる。
ポカミスなんて当り前。バグなく一発で動かせることなんて滅多にない。だから、逆に何もなく動いたときには、「本当はどこか間違っているんじゃないか」 (@_@;) と疑ってしまう。そんなバグとお友達な自分は、Pyscripter ・ logging において次のような設定と使い方をしている。
行番号の表示
まずは、ソースコードにおいて行番号が表示されるようにする。エラーがでたときには、ファイル名と行番号が出力されるので、行番号が表示されていた方が使いやすい。また、ちょっとだけ現在編集している場所から離れるときに、行番号を見て覚えておけば、元の場所に戻りやすい。
方法は、ツールバーのボタンで、行番号の表示・非表示を切り替える。以下のボタンが表示されてないときは、View > Toolbars >Editor Toolbar をチェックする。
または、次のように設定できる。
- メニューより 「Tools > Options > Editor Options」
- Display タブ > Gutter の `Show line numbers' をチェックする。
UnitTest で問題が発生した場所へジャンプ
UnitTest を実行し、失敗またエラーがあった場合、ファイルのどの位置で発生したかについて、画面下部の Python Interpreter ペインに赤字で表示される。このとき、行番号が書かれている行でダブルクリックをすると、その位置へジャンプしてくれる。
出力が一杯になって見にくくなったら、Python Interpreter ペインの中で、すべて選択 (Ctrl + A)、 Delete 。
ログの出力行へジャンプ
ログの出力の方法については、6.29.2 基本的な使い方を参照。 (cf. Google App Engine (Python) でログを出力 )
ログの設定を次のようにしておく。
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s ' + \ '"%(pathname)s", line %(lineno)d, %(message)s')
ログの出力フォーマットについては、6.29.6 Formatter オブジェクトを参照。
例えば次のログ出力、
logging.debug(u"こんにちは、バグです!")
の結果は、
2008-09-13 11:40:37,125 DEBUG "c:\develop\src\python\liquorchecksimple\liquortest.py", line 174, こんにちは、バグです!
Pyscripter の Python Interpreter ペインで、出力された行をクリックすると、その場所へジャンプしてくれる。上記のように書式を設定した理由は、UnitTest の出力を真似すれば Pyscripter がその行へジャンプしてくれるかと思って。
テンプレート
import logging if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s ' + \ '"%(pathname)s", line %(lineno)d, %(message)s') logging.getLogger().setLevel(logging.DEBUG)
0コメント:
コメントを投稿