みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
ノンプログラマー向けにAnacondaとPyCharmによるPythonの環境構築についてお伝えしています。
前回の記事はこちら。
PyCharmの便利なコードチェック機能についてお伝えしました。
さて、今回はデバッグについてですね。
うまく動作しなかったとき…、PyCharmにはその原因を探るための優秀な機能が搭載されています。
ということで、PyCharmによるデバッグの基本中の基本についてお伝えしていきます。
では、行ってみましょう!
デバッグ方法の確認用コードとそのエラーについて
まず、デバッグの方法を確認するために、エラーが含まれるコードを作成してみましたので、どんなコードか、またどんなエラーが出るのかを紹介します。
距離と時間から速度を求めるスクリプトを考えましょう。
かかった時間(分)をminutes、距離(km)をdistanceとして設定をして、それらをゴニョゴニョして関数get_speedに渡して戻ってきた速度(km/時)を出力するというものです。
minutes = 10
distance = 5
print('平均時速:', get_speed(minutes / 60, distance))
関数get_speedはこちら。
def get_speed(kms, hours):
return kms / hours
進んだ距離kmsと、それにかかった時間hoursを受け取って、戻り値として時速を返す関数です。
それで、そのまま実行をすると、出力結果は
平均時速: 0.03333333333333333
…そんなばかな。
10分の時間をかけて、5km進んだわけですから、時速は0.033…kmというのは明らかにおかしい。時速30kmになるはずです。
この手がかりをさがすために、PyCharmのデバッグ機能をつかってみたいと思います。
(勘の良い方は、ソースコードか画面キャプチャ見てわかっちゃっていると思いますが、もうしばらくお付き合いください。)
PyCharmでのデバッグの基本手順
PyCharmのデバッグの基本手順は以下の通りです。
- ブレークポイントを設置
- デバッグを開始(ブレークポイントで止まる)
- ステップ実行で1行ずつ実行
- 変数などの値を確認
前述のお題を使いながら、実際にその使い方を見ていきましょう。
ブレークポイントの設置
まず、ブレークポイントを設置します。
行番号の右横あたりのエリアをマウスでクリックすると、赤い丸が表示されるようになりますが、これがブレークポイント。
ひとまず、今回は最初に実行される5行目に付けてみました。
ちなみに、ブレークポイントというのは、その名の通り「止めるポイント」で、デバッグモードで実行したときに、そこでいったん処理が止まってくれるようになるというものです。
デバッグを開始
その状態でデバッグを開始します。
右上にある「虫」ボタンがデバッグのボタンなので、クリックしましょう。
ちなみに、表示されているとおり、 Shift + F9 でもOKです。
これでデバッグがスタートするのですが、先ほど設置したブレークポイントでいったん実行が止まります。行全体が青くハイライトされたのがその証拠です。
ステップ実行で1行ずつ確認する
そしたら、ここから1行ずつ動作をさせて確認していきますよ。
ツールウィンドウには「Debugger」というタブが表示されていると思いますが、そこにはいろんな矢印のアイコンが並んでいます。
その中から以下の「Step Into」というボタンを探してクリックします。
表示されている通り、 F7 キーでもOKです。
すると、以下のようにいろいろなことが起きます。
まず、5行目が実行されて、次の6行目が青のハイライト、つまり中断している状態になります。
一方で、通過した5行目には
minutes: 10
という表示がされました。代入された値を教えてくれているのです。
また、ツールウィンドウでも
minutes = {int} 10
と表示されていて、minutesに格納された値とそのデータ型を確認できます。
さらにもう一度、「Step Into」ボタンをクリック(または F7 )をすると、さらに1行進みます。
そして、変数distanceの値もエディタとツールウィンドウに表示されるようになります。
このように1行ずつ実行するのをステップ実行といいます。
そして、中断したらそれまでに値が代入された変数については、エディタ上とツールウィンドウで確認できるようになります。
これらの値を確認しながら、手がかりを探していくわけですね。
ステップ実行で呼び出した関数に入る
ちなみに、「Step Into」ではなくて、その隣の「Step Over(F8)」を使うと、呼び出した関数の中には入っていかないステップ実行になります。
呼び出した関数にも入っていきたい場合は「Step Into」を使います。
さて、さらにStep Intoによるステップ実行を進めて、呼び出した関数get_speedの中に入っていきます。
呼び出した関数に入るとスコープが変わるので、エディタとツールウィンドウに表示される変数が変わるのですが…
kms: 0.16666…
hours: 5
おや?おかしいですよね!?
距離が5で、時間は10/60=1.66666…を引数として渡したはずですが、渡した時点で逆になってしまっています。
関数get_speedの引数の並べ方について、kmsとhoursの順番を間違えていたということですね。
これで、原因を見つけることができました。
まとめ
以上、PyCharmによるデバッグの方法の基本についてお伝えしました。
- ブレークポイントを設置して
- デバッグ開始
- ステップ実行して、各ステップごとの変数の値をエディタまたはツールウィンドウで確認
ですね。
これらの機能を活用して、すばやくバグを見つけちゃいましょう。
次回は、PyCharmでパッケージをインストールする方法をお伝えします。
どうぞお楽しみに!
連載目次:ノンプロPython~Anaconda&PyCharm環境作り
非エンジニア&Windowsユーザー向けのPython環境つくり。ゆくゆくはワンランク上のことにチャレンジしたい…!という方であれば、早めの段階で環境を作っておいてしまうという手もありますね。このシリーズでは、Anaconda&PyCharmでPythonの環境を作る手順についてシリーズでお伝えします。- 【Python】非エンジニアWindowユーザー向けのAnacondaインストールの手順
- 【ノンプログラマー向けPython】Anaconda Promptとは何か、またその超基本の使い方
- 【ノンプログラマー向けPython】統合開発環境「PyCharm」のインストールと初期設定
- 【ノンプログラマー向けPython】PyCharmではじめてのスクリプトを作成して実行する方法
- 【ノンプログラマー向けPython】まず最初に覚えたいPyCharmのショートカットキーまとめ
- 【ノンプログラマー向けPython】PyCharmのコードを点検&補正する機能がすごい!
- 【ノンプログラマー向けPython】PyCharmでデバッグをする基本中の基本
- 【ノンプログラマー向けPython】PyCharmでパッケージをインストールする方法
- 【ノンプログラマー向けPython】Anacondaでpyファイルをダブルクリックで実行できるように設定する