17章「デバッグ」の対策ポイントと例題
17章「デバッグ」からは本番40問中2問が出ます。pdb による対話的なデバッグと、例外情報・性能計測の読み方を問う章です。
- pdb
- breakpoint()
- traceback
- warnings
- timeit
- cProfile
この章の出題数と位置づけ
17章「デバッグ」からは本番40問のうち2問が出題されます。 全体に占める割合は5.0%で、15章中6番目タイの出題数です(同じ2問の章が他に7章あります)。 合格に必要なのは28問正解(12問まで不正解可)なので、 この章の2問をどこまで取りに行くかは、他の章との兼ね合いで決めるのが現実的です。
対策のポイント
- breakpoint() が pdb.set_trace() の新しい書き方であることと、pdb のコマンド(n / s / c / l / p)を押さえます。
- n(次の行へ)と s(関数の中に入る)の違いは、そのまま出題されます。
- traceback は下から上ではなく、上から下に呼び出しの深い方へ進む、という読み方を確認します。
- timeit は小さなコードの計測、cProfile は全体のプロファイル、という使い分けも範囲です。
この章の例題(3問)
当サイトで実際に出題している問題から3問を、正解と解説つきで掲載します。 すべて自作のオリジナル問題で、実際の試験問題ではありません。
例題1. logging モジュールでルートロガーの既定のログレベルはどれか。
- 正解WARNING
- DEBUG
- INFO
- ERROR
解説: 既定は WARNING なので、設定なしだと logging.info() は何も出力されない。DEBUG や INFO を出すには basicConfig(level=logging.DEBUG) 等で下げる必要がある。レベルの順は DEBUG < INFO < WARNING < ERROR < CRITICAL。
例題2. Python 3.7 以降で、import なしにデバッガを起動できる組み込み関数はどれか。
- 正解breakpoint()
- debug()
- set_trace()
- trace()
解説: breakpoint() は組み込み関数で、既定では pdb.set_trace() を呼ぶ。環境変数 PYTHONBREAKPOINT で挙動を変えられ、0 を設定すると無効化できる。set_trace() 単体は pdb を import しないと使えない。
例題3. pdb で「現在の行を実行するが、関数呼び出しの中には入らずに次の行へ進む」コマンドはどれか。
- 正解n
- s
- c
- l
解説: n(next)は関数の中に入らない。s(step)は中に入る。c(continue)は次のブレークポイントまで進み、l(list)はソースを表示するだけ。
この章は当サイトに全18問を収録しています。残りはドリルの「章別に解く」から解けます。