『退屈なことはPythonにやらせよう』11章 デバッグのらくがき帳📝
こんにちは。aliceです。
最近やりたいことは、ベランダでハーブを育てまくることです。
好きなときにハーブウォーターを飲みたいです。
今回は『退屈なことはPythonにやらせよう』11章 デバッグのらくがき帳です。
loggingが楽しくてもう少し遊びたいのですが、終わらなくなりそうなのでまずはさくっと通り過ぎます。
(他のところもさくっと通り過ぎた🚙)
別枠であそぼう🪅
前回のらくがき帳📝
では、以下らくがきです。
11章 英語版🔤
GitHub💖
11.4.1 loggingモジュールを用いる
loggingモジュール
まずはloggingモジュールを使ってみる。
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('Start of program')
def factorial(n):
logging.debug('Start of factorial(%s)' % (n))
total = 1
for i in range(1, n + 1):
total *= i
logging.debug('i is ' + str(i) + ', total is ' + str(total))
logging.debug('End of factorial(%s)' % (n))
return total
print(factorial(5))
logging.debug('End of program')
実行してみた。
ここらへんは、だいたいいつも同じなのかな?
レベルを変えつつ、出力内容はだいたいここらへんがあればよい気がするなぁ。
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
11.4.2 print()関数でデバッグしないようにしよう
誘惑に負けないでください📣
ログメッセージは、ユーザー用ではなくプログラマー用のものです📝
11.4.3 ログレベル
ログレベルを使うと、ログメッセージを重要度によって分類できます。
普段からWARNINGレベルで気づきたい。
でも気づくとCRITTICALになってるんだよなー🥲
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('デバッグ用詳細情報')
logging.info('お疲れモードチェック中')
logging.warning('ちょっと疲れがたまってきているよ。はやく寝よう')
logging.error('エラー!エラー!睡眠不足だよ。睡眠負債がたまるよ😱')
logging.critical('致命的エラー!今日は早く寝よう!何がなんでも12時までに寝よう')
ここを読んで、私の腸活デバッグがERRORレベルじゃん!と思ったので、具たくさん味噌汁生活を再開しました。
きのこを2種類&玉ねぎ&乾燥ベジタブル&あおさ&じゃがいもorさつまいもを入れています。
もりもりです。
お味噌汁で「まごはやさしい」を満たそうというスタイルです。
しらすもたまに入れます。
11.4.4 ログを無効化する
ログ出力を無効化する
logging.disable(logging.CRITICAL)
ログ出力しなくて良いけど、常にデバッグはしてほしいですね。
import logging
logging.basicConfig(level=logging.INFO, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.disable(logging.CRITICAL)
logging.critical('致命的エラー!今日は早く寝よう!何がなんでも12時までに寝よう')
logging.disable(logging.CRITICAL)
logging.critical('致命的エラー!今日は早く寝よう!何がなんでも12時までに寝よう')
logging.error('エラー!エラー!睡眠不足だよ。睡眠負債がたまるよ😱')
11.4.5 ファイルへログを出力する
ログ内容をテキストファイルに出力します。
import logging
logging.basicConfig(
filename='myProgramLog.txt',
level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s - %(message)s')
logging.critical('致命的エラー!今日は早く寝よう!何がなんでも12時までに寝よう')
logging.disable(logging.CRITICAL)
logging.critical('致命的エラー!今日は早く寝よう!何がなんでも12時までに寝よう')
logging.error('エラー!エラー!睡眠不足だよ。睡眠負債がたまるよ😱')
11.8 演習プロジェクト
11.8.1 コイン投げゲームのデバッグ
コイン投げゲームのプログラムにあるいくつかのバグをみつけましょう。
ということで、修正してみました。
import logging
import random
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
# logging.disable(logging.CRITICAL)
def get_input():
while True:
guess = input('コインの表裏を当ててください。表か裏を入力してください:')
if guess in ('裏', '表'):
return guess
def get_toss():
toss = random.choice(['表', '裏'])
logging.debug(f'toss = {toss}')
return toss
def main():
toss = get_toss()
guess = get_input()
if toss == guess:
print('あたり!')
else:
print('はずれ!もう1回あてて')
toss = get_toss()
guess = get_input()
if toss == guess:
print('あたり!')
else:
print('はずれ。またチャレンジしてね。')
if __name__ == '__main__':
main()
正解を答えてみる。
あえて間違えてみる。
ちょいとデバッグするのが楽しくなりました。
いろいろ調べてみた!
この記事が気に入ったらサポートをしてみませんか?