VS Codeを使ってPythonコードをデバッグするための基礎知識Visual Studio Codeで快適Pythonライフ(1/2 ページ)

[実行とデバッグ]ビュー、デバッグ用ツールバー、ステップ実行など、VS CodeでPythonコードをデバッグする上での基本知識を紹介。

» 2021年07月16日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Visual Studio Codeで快適Pythonライフ」のインデックス

連載目次

 前回は、mymath.pyファイルにフィボナッチ数を求める関数を3つ定義しました。今回は、Visual Studio Code(以下、VS Code)を使って、それらのコードを実行したり、デバッグしたりする手順を見ていきましょう。

コードの説明

 まずは前回記述したコードを以下に示しておきます。これはmymath.pyファイルに記述しました。

def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n - 2) + fib(n - 1)


def fib_l(n):
    a = 0
    b = 1
    if n == 0:
        return a
    elif n == 1:
        return b
    for _ in range(n - 1):
        a, b = b, a + b
    return b


def fib_m(n, memo=None):
    if not memo:
        memo = {0: 0, 1: 1}
    if n not in memo:
        memo[n] = fib_m(n - 2, memo) + fib_m(n - 1, memo)
    return memo[n]

フィボナッチ数を求める3つの関数(mymath.pyファイル)

 そして、これら3つの関数を呼び出すのが以下のコードです。これらはmain.pyファイルに記述しましょう。

from mymath import fib, fib_l, fib_m

def main():
    print(f'result of {fib.__name__}(10): {fib(10)}')
    print(f'result of {fib_l.__name__}(10): {fib_l(10)}')
    print(f'result of {fib_m.__name__}(10): {fib_m(10)}')

if __name__ == '__main__':
    main()

3つの関数を呼び出すコード

 それほど難しいところはありません。3つの関数をインポートして、main関数の中でそれらを呼び出して、その結果を表示しているだけです。説明が必要なのは、print関数呼び出しの中にある「fib.__name__」などでしょう。関数にはその名前を記した__name__属性があります。つまり、「fib.__name__」などは、その関数の名前を取得することを意味しています。よって、上のprint関数呼び出しでは、「result of 関数名(10): 計算結果」のような表示が行われます。

main.pyファイルにコードを記述したところ main.pyファイルにコードを記述したところ

 では、3つの関数が同じ結果を返すのか、コードを実行してみましょう。まずはVS Codeで一番簡単にコードを実行する方法を見てみます。

ターミナルでPythonファイルを実行

 一番簡単な方法というのは、エディタ領域右上にある[ターミナルでPythonファイルを実行]ボタンをクリックするか、[F1]キーを押してコマンドパレットから[Python: ターミナルでPythonファイルを実行](Python: Run Python File in Terminal)コマンドを実行するかです。どちらの方法でも、VS Codeのパネル領域にターミナルが開いて、そこで「現在エディタ領域でアクティブになっているファイル」がPythonインタプリターを使って実行されます(コマンドパレットには2つの[Python: ターミナルでPythonファイルを実行]コマンドが表示されていますが、ここで選択するのは「python.execInTerminal」とある方です)。

[ターミナルでPythonファイルを実行]ボタン
[ターミナルでPythonファイルを実行]ボタン
[Python: ターミナルでPythonファイルを実行]コマンド
[Python: ターミナルでPythonファイルを実行]コマンド

Pythonプログラムを実行するボタンとコマンド


 エディタ領域でmain.pyファイルがアクティブな状態にして、これらのコマンドを実行すると、パネル領域にターミナルが開き、全て「55」という計算結果が得られました。

実行結果 実行結果

 Pythonファイルを実行するだけなら、これで十分ですが、プログラムをデバッグするには別の方法が必要です。次にその方法を見てみましょう。

プログラムのデバッグ

 プログラムをデバッグするには、サイドバーの[実行とデバッグ]ビューを使います。

[実行とデバッグ]ビュー [実行とデバッグ]ビュー

 「実行とデバッグをカスタマイズするには、launch.jsonファイルを作成します」とありますが、標準の構成でデバッグを行うだけであれば、その上にある[実行とデバッグ]ボタンをクリックするだけです(デバッグの構成については次回取り上げる予定です)。というわけで、これをクリックしてみましょう(このとき、エディタ領域ではやはりmain.pyファイルをアクティブにしておきます)。

 すると、VS Codeの上部にデバッグ構成を選択するダイアログが表示されるので、ここでは[Python File]を選択してください。

デバッグ構成の選択 デバッグ構成の選択

 [実行とデバッグ]ビューやステータスバーの表示が一瞬変わって、パネル領域には新しく「Python Debug Console」が開かれて、そこにプログラムを実行した結果が表示されます。

[実行とデバッグ]ボタンをクリックして、デバッグ構成を選択し、プログラムを実行した結果 [実行とデバッグ]ボタンをクリックして、デバッグ構成を選択し、プログラムを実行した結果

 前回の[ターミナルでPythonファイルを実行]したときと同じ結果が出力されました。これだけだと、違いはよく分かりません。そこで今度はブレークポイント(プログラムの実行がそこまで進んだら、実行を中断する箇所)を設定してみましょう。

ブレークポイントの設定

 ここでは、main関数にある最初のprint関数呼び出しにブレークポイントを設定することにします。ブレークポイントを設定するには、エディタで設定したい行の左端をクリックします(行番号が表示されているのなら、その左側)。

マウスによるブレークポイントの設定 マウスによるブレークポイントの設定

 キーボードからブレークポイントを設定するなら、設定したい行にカーソルを移動して[F9]キーを押します。なお、これらの操作に対応するコマンドパレットのコマンドは[デバッグ: ブレークポイントの切り替え](Debug: Toggle Breakpoint)です。上の画像にある通り、ブレークポイントを設定した行の左端には赤い丸でそのことが示されます。同時に、[実行とデバッグ]ビューの最下部には[ブレークポイント]セクションに今設定したブレークポイントが表示されるようになります。

[実行とデバッグ]ビューの[ブレークポイント]セクション [実行とデバッグ]ビューの[ブレークポイント]セクション

 その上にあるのは、プログラムのデバッグ実行時に発生した例外を捕捉するかどうかの指定です(ここではそのままにしておきます)。

 設定したブレークポイントを解除するには、上と同じ操作(エディタの左端をクリックするか、[F9]キーを押すか、コマンドパレットで[デバッグ: ブレークポイントの切り替え]コマンドを実行するか)をします。また、プログラムに多数のブレークポイントを設定しているときには、[ブレークポイント]セクションで各ブレークポイントにあるチェックボックスを使って有効/無効を切り替えられます。

 ブレークポイントが設定できたので、次ページではこのプログラムがどのように動くのかを実際に確認してみましょう。

       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。