在 VS Code 中格式化 Python
格式化使源代码更易于人类阅读。通过强制执行特定规则和约定(例如行间距、缩进和运算符周围的空格),代码将变得更具视觉组织性和可理解性。你可以在 autopep8 页面上查看示例。请记住,格式化不会影响代码本身的功能。
代码 linting 通过分析代码以查找常见的语法、样式和功能错误以及非标准编程实践来帮助防止错误。虽然格式化和代码 linting 之间存在一些重叠,但两种功能都是互补的。
选择格式化程序
搜索 VS Code 市场,找到你选择的格式化程序扩展。
Microsoft 发布了以下格式化程序扩展
格式化程序 | 扩展 |
---|---|
autopep8 | https://marketplace.visualstudio.com/items?itemName=ms-python.autopep8 |
Black 格式化程序 | 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 |
此外,以下格式化程序扩展支持导入排序
格式化程序 | 扩展 |
---|---|
Ruff | https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff |
isort | https://marketplace.visualstudio.com/items?itemName=ms-python.isort |
注意:如果在上面的表格或市场中找不到你喜欢的格式化程序,你可以通过扩展添加对它的支持。你可以使用 Python 扩展模板 将新的 Python 工具集成到 VS Code 中。
设置默认格式化程序
安装格式化程序扩展后,你可以按照以下步骤将其选择为 VS Code 中 Python 文件的默认格式化程序
- 在 VS Code 中打开一个 Python 文件。
- 右键单击编辑器以显示上下文菜单。
- 选择**使用... 格式化文档**。
- 从下拉菜单中选择**配置默认格式化程序...**。
- 从列表中选择你喜欢的格式化程序扩展。
或者,你可以在你的用户 `settings.json` 文件中(在 `[python]` 范围内)设置 `“editor.defaultFormatter”`,将其设置为所有 Python 文件的默认格式化程序。可以使用**首选项:打开用户设置 (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"
}
}
}
格式化代码
你可以通过右键单击编辑器并选择**格式化文档**来格式化代码,也可以使用 ⇧⌥F (Windows Shift+Alt+F,Linux Ctrl+Shift+I) 键盘快捷键。
你还可以将以下设置添加到你的用户 `settings.json` 文件中,以便在保存代码时启用格式化
"[python]": {
"editor.formatOnSave": true
}
一般格式化设置
你可以参考每个格式化程序扩展的 README 以了解有关支持设置的更多详细信息。以下设置受大多数格式化程序扩展支持
设置后缀 |
默认值 | 说明 |
---|---|---|
args | [] |
要传递给格式化程序的参数。每个参数都应作为数组中的单独字符串传递。 例如 black-formatter.args: ["--line-length", "100"] |
importStrategy | useBundled |
当设置为 `useBundled` 时,扩展将使用它附带的工具版本。当设置为 `fromEnvironment` 时,它将尝试首先从你选择 Python 环境中加载,否则将回退到捆绑的版本。 |
path | "" |
要用于格式化的格式化程序二进制文件的路径。注意:使用此选项可能会减慢格式化速度。 |
interpreter | [] |
当设置为 Python 可执行文件的路径时,扩展将使用该路径启动格式化程序服务器及其子进程。 |
showNotifications | off |
控制扩展何时显示通知。支持的值为 `off`、`always`、`onError` 和 `onWarning`。 |
排查格式化问题
如果格式化失败,请检查以下可能的原因
问题 | 解决方案 |
---|---|
有多个格式化程序可用于 Python 文件。 | 按照 上面的部分 中的说明设置默认格式化程序。 |
没有“使用... 格式化文档”选项可用。 | 如果在上下文菜单中看不到此选项,则可能是你没有在 VS Code 中安装或启用格式化程序扩展。参考 选择格式化程序 部分以查看如何安装 Python 格式化程序扩展。 |
格式化程序的自定义参数不正确。 | 检查相应的 `<formatter>.path` 设置是否不包含参数,以及 `<formatter>.args` 是否包含单个顶级参数元素列表。 |
显示“你已弃用代码 linting 或格式化设置”通知。 | 如果你看到此通知,则意味着你在 VS Code 中设置了诸如 `python.linting` 或 `python.formatting` 之类的设置。这些设置不再受 Python 扩展支持,因为 代码 linting 和格式化支持已迁移到工具扩展。 |
当使用 Black 格式化器时,格式选择命令会失败。 | black 不支持格式化代码片段。为了解决此限制,您可以禁用粘贴时的格式化并设置 formatOnSave 以使用以下设置格式化整个文件:"[python]": {"editor.formatOnPaste": false, "editor.formatOnSaveMode": "file"} 。 |
即使安装了格式化扩展,格式化也不起作用。 | 格式化失败可能有多种原因,例如代码中的语法问题、使用不受支持的 Python 版本或格式化程序配置不正确。检查格式化扩展的输出通道以了解格式化程序失败的原因(在命令面板中运行输出:聚焦输出命令,然后选择格式化扩展通道)。 |
注意:如果您在上面没有找到首选的格式化程序,您可以通过扩展添加支持。 Python 扩展模板 使得将新的 Python 工具集成到 VS Code 中变得轻而易举。
后续步骤
- 调试 - 学习在本地和远程调试 Python。
- 测试 - 配置测试环境,并发现、运行和调试测试。
- 基本编辑 - 了解功能强大的 VS Code 编辑器。
- 代码导航 - 在源代码中快速移动。
- Python 扩展模板 - 创建一个扩展,将您最喜欢的代码检查器集成到 VS Code 中。