在 VS Code 中格式化 Python 程式碼
格式化可以讓原始程式碼更容易被閱讀。透過強制執行特定的規則與慣例(例如行距、縮排以及運算子周圍的間距),程式碼在視覺上會變得更有條理且更易於理解。您可以在 autopep8 頁面上查看範例。請記住,格式化不會影響程式碼本身的功能。
Linting(程式碼檢查)有助於透過分析程式碼中的常見語法、風格、功能錯誤以及非常規的程式設計習慣來預防錯誤。雖然格式化與 Linting 之間有一些重疊,但這兩項功能是相輔相成的。
選擇格式化工具 (Formatter)
請在 VS Code Marketplace 中搜尋您選擇的格式化工具擴充功能。
Microsoft 發佈了下列格式化擴充功能
| 格式化工具 | 擴充功能 |
|---|---|
| autopep8 | https://marketplace.visualstudio.com/items?itemName=ms-python.autopep8 |
| Black formatter | https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter |
社群提供的格式化擴充功能
| 格式化工具 | 擴充功能 |
|---|---|
| Ruff | https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff |
| yapf | https://marketplace.visualstudio.com/items?itemName=eeyore.yapf |
此外,以下是支援匯入排序 (import sorting) 的格式化擴充功能
| 格式化工具 | 擴充功能 |
|---|---|
| Ruff | https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff |
| isort | https://marketplace.visualstudio.com/items?itemName=ms-python.isort |
注意:如果您在上述表格或 Marketplace 中找不到您偏好的格式化工具,您可以透過擴充功能新增支援。您可以使用 Python 擴充功能範本 (Python Extension Template) 將新的 Python 工具整合到 VS Code 中。
設定預設格式化工具
安裝格式化擴充功能後,您可以依照下列步驟將其選為 VS Code 中 Python 檔案的預設格式化工具
- 在 VS Code 中開啟一個 Python 檔案。
- 右鍵點選編輯器以顯示右鍵選單。
- 選擇 使用...格式化文件 (Format Document With...)。
- 從下拉選單中選擇 設定預設格式化工具... (Configure Default Formatter...)。
- 從列表中選擇您偏好的格式化擴充功能。
或者,您也可以透過在使用者 settings.json 檔案中的 [python] 作用域內設定 "editor.defaultFormatter",將其設為所有 Python 檔案的預設格式化工具。您可以使用 喜好設定:開啟使用者設定 (JSON) (Preferences: Open User Settings (JSON)) 指令來開啟 settings.json。
例如,若要將 Black Formatter 設為預設格式化工具,請將以下設定新增至您的使用者 settings.json 檔案中
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
}
若要將格式化擴充功能設定為匯入排序工具,您可以在使用者 settings.json 或工作區 settings.json 檔案中的 [python] 作用域內,設定 "editor.codeActionsOnSave" 偏好選項。您分別可以使用 喜好設定:開啟使用者設定 (JSON) 與 喜好設定:開啟工作區設定 (JSON) 指令來開啟這些 settings.json 檔案。這將啟用所有 Python 檔案在儲存時進行匯入排序。
例如,若要將 Ruff 設為您偏好的匯入排序工具,您可以將以下設定新增至您的使用者 settings.json 或工作區 settings.json 檔案中
{
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports.ruff": "explicit"
}
}
}
格式化您的程式碼
您可以透過右鍵點選編輯器並選擇 格式化文件 (Format Document),或是使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 鍵盤快速鍵來格式化程式碼。
您也可以將以下設定新增至您的使用者 settings.json 檔案,以啟用程式碼在儲存時自動格式化
"[python]": {
"editor.formatOnSave": true
}
一般格式化設定
您可以參考各個格式化擴充功能的 README 以了解更多關於支援設定的詳細資訊。大多數格式化擴充功能皆支援以下設定
| 設定後綴 |
預設值 | 說明 |
|---|---|---|
| 引數 | [] |
傳遞給格式化工具的引數。每個引數都應在陣列中以獨立的字串傳遞。 例如 black-formatter.args: ["--line-length", "100"] |
| importStrategy | useBundled |
當設定為 useBundled 時,擴充功能會使用隨附的工具版本。當設定為 fromEnvironment 時,它會優先嘗試從您選擇的 Python 環境載入,否則會退回到隨附的版本。 |
| path | "" |
用於格式化的格式化工具二進位檔案路徑。注意:使用此選項可能會拖慢格式化速度。 |
| interpreter | [] |
當設定為 Python 執行檔路徑時,擴充功能將使用該路徑來啟動格式化伺服器及其子處理程序。 |
| showNotifications | 關閉 |
控制擴充功能何時顯示通知。支援的值為 off、always、onError 與 onWarning。 |
疑難排解格式化問題
如果格式化失敗,請檢查下列潛在原因
| 問題 | 解決方案 |
|---|---|
| Python 檔案有多種可用的格式化工具。 | 請依照上述章節的指示設定預設格式化工具。 |
| 沒有「使用...格式化文件」選項可用。 | 如果您在右鍵選單中沒看到此選項,很可能是因為您尚未在 VS Code 中安裝或啟用格式化擴充功能。請參閱選擇格式化工具章節,了解如何安裝 Python 格式化擴充功能。 |
| 格式化工具的自訂引數不正確。 | 請檢查適當的 <formatter>.path 設定是否未包含引數,並確保 <formatter>.args 包含一份個別的頂層引數元素列表。 |
| 顯示「您有已棄用的 Linting 或格式化設定」通知。 | 如果您看到此通知,代表您在 VS Code 中有 python.linting 或 python.formatting 等設定。由於 Linting 與格式化支援已遷移至工具擴充功能,這些設定已不再由 Python 擴充功能支援。 |
| 使用 Black Formatter 時,格式化選取範圍 (Format Selection) 指令失敗。 | black 不支援格式化程式碼片段。若要繞過此限制,您可以停用貼上時自動格式化,並設定 formatOnSave 以使用以下設定格式化整個檔案:"[python]": {"editor.formatOnPaste": false, "editor.formatOnSaveMode": "file"}。 |
| 即使安裝了格式化擴充功能,格式化仍然無法運作。 | 格式化失敗的原因可能有多種,例如程式碼中的語法問題、使用了不支援的 Python 版本,或格式化工具設定不正確。請檢查格式化擴充功能的「輸出 (Output)」頻道以了解格式化失敗的原因(在指令選擇區 (Command Palette) 執行 輸出:聚焦於輸出 (Output: Focus on Output) 指令,然後選擇該格式化擴充功能的頻道)。 |
注意:如果您在上方列表中找不到您偏好的格式化工具,您可以透過擴充功能新增支援。Python 擴充功能範本 (Python Extension Template) 可讓您輕鬆地將新的 Python 工具整合到 VS Code 中。
後續步驟
- 偵錯 - 學習如何在本地與遠端對 Python 程式進行偵錯。
- 測試 - 設定測試環境,並探索、執行與偵錯測試。
- 基本編輯 - 了解功能強大的 VS Code 編輯器。
- 程式碼導覽 - 在原始碼中快速移動。
- Python 擴充功能範本 - 建立一個擴充功能,將您最喜愛的 Linter 整合到 VS Code 中。