- 更新日: 2018年11月08日
- 公開日: 2018年11月06日
【Python入門】デバッグ機能を使ってみよう
プログラミングを学習していると必ず遭遇するエラー。
最初のうちはエラーが出るとテンション下がるものですが、学習時間と比例してエラーにも慣れていくことでしょう。
今回は、Python初学者の方に知っておいて欲しいエラー対策の「デバッグ」をご紹介します。
デバッグ(debug)・・・プログラム上の誤り(バグ)を発見して訂正すること
【Python入門】デバッグ機能を使ってみよう
今時のデバッグ
Python学習者の中には、知らないない内にデバッグを体験されている方もいらっしゃるのでは。 それはデバッグ機能が盛り込まれた PyCharm や Visual Studio Codeの拡張機能を使うことによって「デバッグ」されているパターン。 コード下に赤や黄色の下線、それからコード上のビックリマークなどを見たことはありませんか?
** -- PyCharm のエラー表示例 --**
使っているソフトによってコードの注意喚起やエラーの表示は違ったりしますが、プログラムエラーとなる重要なエラー喚起は大抵どれも同じ。 まずはPythonのデバッグ方法をいくつかご紹介します。
Pythonのデバッグ方法
👇 デバッグの様子動画
Pythonのデバッグ方法をいくつかご紹介。
- エラーメッセージに従って
- テキストエディタ/Visual Studio Code の拡張機能で
- テキストエディタ/Atom のプラグインで
- IDE/ PyCharmで
- 標準ライブラリ pdbで
- GUI アプリの Pudbで
- オンライン/Net pdbで
デバッグ機能を動かしたことのない方は、まずは上記動画で様子を確認してみて下さい。動画は、バグ無しのプログラムですが、デバッグ未体験者としては興味深い操作例と思います。
また「Pythonのデバッグ」と一言でいっても、対象となるプログラムとデバッグソフトには相性があります。
-- デバッグソフトとプログラムのマッチング例 --
デバッグソフト | Pythonプログラム |
IDE やテキストエディタの拡張機能 | オブジェクト指向 や 単独Pythonプログラムの両方 |
標準ライブラリのpdb | 単独のPythonプログラム |
まず IDE や テキストエディタの拡張機能やプラグインを使ってデバッグを行った場合、ほとんどのPythonプログラムをデバッグできます。しかし、Python標準ライブラリの pdb を使った場合は、複数枚の Pythonファイルからプログラムが構成されるようなオブジェクト指向の場合、デバッグがやや困難。
それは pdb の場合、Pythonコードにデバッグ箇所を追記するか、Pythonプログラム実行コマンドで引数の設定が必要となるためです。 短絡的なデバッグについては手軽に試せますので、IDE や テキストエディタのプラグイン等に頼らない標準のデバッグ方法 pdb も知っておくと心強いでしょう。
pdbでデバッグ
画像引用:python.jp
pdbは、Pythonのコード内に pdb を埋め込むか、コマンド上で pdb をセットするかのどちらかになります。今回は、手軽に試せる「コマンド上での pdb セット、デバッグ実行をご紹介」。
【デバッグを試すコード】
fruits = ['りんご', 'みかん', 'バナナ']
for x in fruits
print(x)
上記コード、一箇所ダメな点があります。
はい、for 分の行末に :
がないですね。
エディタからもエラー表示出ていますが、コマンドでプログラムを実行すると、以下のように。
そして今回試す pdb を使ってみると、、、
python -m pdb ○○.py
エラー文は長いですが、デバッグを使わない場合のエラー表示と同じですね。
プログラムを修正して、改めて python -m pdb loop_bug.py
とすると、pdb が起動。
上記で入力している pdb の基本操作を以下にご紹介。
- list/読み込んでいるコードを表示
- step/次の処理コードに移動
- continue/次の処理ブロックに移動
exit/デバッグの終了
break ○○.py:○行目/ブレイクポイントのセット
break/セットしたブレイクポイントの一覧表示
デバッグ時に使うブレイクポイントの設定は、break ○○:○行目
なので、試しに break loop_bug.py:2
とすると以下のように。
ブレイク設定行には B マークが付いていることが確認できます。筆者は、Ubuntu環境下ですが、Windowsでも pdb の使用感は同じです。
Pythonのデバッグ、その前に
今回 Pythonのデバッグ方法をいくつかご紹介させていただきましたが、まずは基本的な文法を知っておく必要がありますし、エラーメッセージを読む力も必要と思います。またエラーメッセージを一つずつ解いて、バグ修正を根気強くやってみる時間、体験も必要と思いますね。一見すると時間のムダ、と思うかもしれませんが、デバッグを通して学ぶことは多いですし、新たな発見も見つかるものです。
最後に Python でよく表示されるエラーメッセージをご紹介させていただきますね。
Pythonのエラーメッセージ一例
エラーメッセージ | エラー内容 |
SyntaxError | 構文エラー |
ZeroDivisionError | 割り算や掛け算で0を使った時のエラー |
NameError | 該当する変数がなかった時のエラー |
TypeError | プログラム処理に適さない型を使った時のエラー |
ModuleNotFoundError | 該当するモジュールやライブラリがない時のエラー |
IndentationError | インデントが適切でない時 |
\AIエンジニアに必要なスキルが身に付く/
まとめ
プログラミング学習で一番の問題はやはり「バグ」でしょう。「思ったように動かない」「あれっ、参考書通りにやっているのに。。。」ここで時間を取られてしまうと、「気力低下」「集中力低下」「眠気の誘導」とプログラミング学習にとってあまりいいことはありません。なるべく短時間の内に回避することが賢明と考えられます。
しかし、エラーメッセージを理解できない、バグを解決できないこともあるもの。そんな時はパソコンから離れてみたり、他の用事をやってみていると「ここをこうしてみようか」「あそこはこっちかな」などいろいろ思い当たる点が浮上するもの。 それでもダメなときは、やはり他の人に聞いてみるのが妥当でしょう。
上記で紹介したフローはあくまで基礎知識があってのこと。Pythonの基礎学習を飛ばしている方、独学でちょっと自信のない方、CodeCampで基礎学習検討してみませんか? 「オンライン × マンツーマン」の CodeCamp なら効率よく Python の基礎を習得できると思いますよ。
- この記事を書いた人
- オシママサラ