VS Code 帶參數 debug python程式

VS Code 帶參數 debug python程式

問題描述

學姊最近問我要怎麼在 VS Code 帶參數去debug python程式,什麼是帶參數執行 Python 程式呢?也就是在 Python 腳本檔依據執行指令的參數來決定程式要跑一個環境、哪一個資料集等等,是一個非常好用的功能。

學姊遇到的問題是如果在終端機上下 python main.py –e 1000 –d datasets,沒辦法在 VS Code 上 debug,原因是因為沒有使用 VS Code debugger,就算用了,也無法指定參數內容,當跑到要吃參數的程式片段的時候會因此拋錯。

解決方法

首先,我先準備了一個範例程式碼 main.py,內容如下,在這個範例檔案會吃兩個參數,一個是 -e 迭代次數、另一個 -d 資料集,我使用了 argparse 套件來吃參數,用法在此不介紹。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

import argparse

def parse_args():
parser = argparse.ArgumentParser(description='a simple demo of argparse')

# epoch argument
parser.add_argument('-e', type=int, required=True)

# datasets path argument
parser.add_argument('-d', type=str, required=True)

# resolve arguments
args = parser.parse_args()

return args


if __name__ == '__main__':
args = parse_args()
epoch = args.e
datasets_path = args.d
print(epoch)
print(datasets_path)

點開 VS Code 左側的 Run and debug,再點選 create a lauch.json file。

Image

接著會跳出 Prompt,選擇 Python File。
Image

點選後,VS Code 就會在當前的資料夾底下,建立一個 .vscode 的資料夾,裡面放 lauch.json,我會要在 configurations 裡面多新增一個 key 叫做 args,裡面填寫我們要執行的參數值,要注意的地方是,參數跟值要分開來寫,舉例來說,原本用終端機執行 python 的指令是 python -e 1000 -d datasets,args就要這樣寫 [“-e”, “1000”, “-d”, “~/test/datasets.csv”]。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"args": ["-e", "1000", "-d", "~/test/datasets.csv"],
"justMyCode": true
}
]
}

Image

為何要這樣設定的原因是因為 VS Code 可以根據我們的參數設定來執行、除錯程式。

點開 VS Code 左側的 Run and debug,按下綠色 Play 按鈕就可以開始 debug,我是在程式碼的第 23 行下斷點,在 watch 監控 epoch、datasets_path 這兩個變數的內容,可以看到我們在 launch.json 設定的參數。

Image

參考文件

https://code.visualstudio.com/docs/cpp/launch-json-reference

作者

Gordon Fang

發表於

2024-01-27

更新於

2024-01-28

許可協議

評論