見出し画像

『退屈なことは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()


正解を答えてみる。


あえて間違えてみる。


ちょいとデバッグするのが楽しくなりました。

いろいろ調べてみた!



この記事が気に入ったらサポートをしてみませんか?