在终端中调试 Python 代码(附示例)1. curl 2. Python 解释器

2025-06-10

在终端中调试 Python 代码(附示例)

1. 卷曲

2. Python解释器

我在 Flask 应用程序中为我的一个项目编写了一个新的端点。我的项目包含许多相互依赖的部分,因此我想通过各种方式进行测试,并扩展我的后端调试工具库。以下是我学会使用并经常用于调试 Python 代码的 3 个工具。🐍

1. 卷曲

curl是一个用于发出 HTTP 请求的命令行工具。我喜欢它,因为它可以快速测试终端是否按照我的预期运行,但一开始我发现编写 curl 代码很令人困惑。

解析卷发的结构

curl 获取请求
检索特定学生信息的 GET 请求示例

-v
是可选的,代表verbose。使用它,您将看到通常隐藏的请求和响应的所有详细信息,这对于调试很有用。

-H
代表header,它用于指定要包含在请求中的额外 header,例如身份验证令牌。在我的示例中,该端点只能由学校员工访问,因此我添加了一个 header 来指示我正在发出内部源请求。否则,请求响应会显示我未授权。(本例中,无需了解 Envoy 是什么,但如果您感兴趣,可以参考以下链接:12

您并不总是需要指定额外的标头(取决于 API 或请求类型),并且您可以在请求中包含许多标头。

curl 发布请求
创建新学生的示例 POST 请求

-X POST
将执行 POST 请求。-X允许您更改使用的 HTTP 方法,因为默认方法是 GET。

-d
代表data。使用此选项,您可以指定要发送到 HTTP 服务器的数据,就像您填写表单并点击提交按钮时浏览器所做的一样。在 curl POST 请求中传递数据的方式有很多种;在我的示例中,我发送的是 JSON 格式。

Content-Type
由于我正在发送数据,所以我需要让服务器知道数据的格式

2. Python解释器

Python解释器是 Python 安装时自带的工具。它是一个交互式的REPL,你可以在其中输入和执行 Python 代码。我经常用它来导入和操作我编写的文件。

开始认识

在 Python 解释器中测试数据库模型模式
service_venv ipython
是我启动解释器的方式。但更常见的方式是输入pythonpython3(取决于你的安装)。注意:IPython提供了比标准 Python 解释器更多的功能,但我展示的示例也可以在标准解释器中执行。

from app.models.student import *
导入要在解释器中使用的特定文件。我指定了student.py文件 的目录路径:顶层目录中有一个app文件夹,其中包含models文件夹,而 models 文件夹又包含文件student.pyimport *表示我需要*该文件中的所有内容 ( )。注意:导入文件时,请勿添加文件后缀。

import 语句是必需的;在我的示例中,如果没有它,StudentModel那么.save()import 语句将未定义,并且 Python 解释器将抛出错误消息。

一切都设置好了,现在我可以测试我的代码是否按预期工作!

python方法
在 Python 解释器中测试 Python 方法

get_students在这个例子中,我正在测试Python 解释器中的特定方法。

我可以做哪些调查?也许我可以测试当用户传入一个字符串值时会发生什么。或者,我可以看看如果用户传入一个有效的整数值,但不存在具有该 ID 的学生,会发生什么。我返回的错误消息有用吗?在方法中get_students,我还没有进行错误处理……目前为止!根据我的经验,在 Python 解释器中进行测试对于“哦,是的,需要添加这个”的实现非常有用。

3. Pytest

Pytest是一个 Python 测试框架,可以快速设置以运行测试并报告结果。它也是另一个命令行工具!

使用 pytest 测试方法

下面是一个集成测试的示例,用于测试 GET 调用是否返回预期数据。

我通过学习示例学习了如何编写测试,但对测试中的值(例如json_body )感到困惑。因此,我把测试分成几个部分,并添加打印语句,就像下面的例子一样。但是运行测试时,我看不到打印语句的输出。🧐

使用 pytest 测试方法

-s

查看 pytest 结果的控制台输出

python -m pytest
是如何通过 Python 解释器调用测试service_venv。特定于我的开发环境。

tests/integration/test_student_resource.py
是我要测试的文件的目录路径。

-s
是本例的亮点。添加此选项后,测试中的所有打印语句都会在运行测试时打印到终端中。现在我就能看到print(json_body)的值了。

Pytest 是一个功能强大的工具,但是这个小-s标志帮助我调试并学习如何编写测试。

就这样!我很期待看到在继续从事后端项目的过程中,我还能学到哪些其他调试工具。

就这样吧,伙计们!

鏂囩珷鏉ユ簮锛�https://dev.to/scarlettperry/debugging-python-code-in-the-terminal-with-examples-d39
PREV
React hooks:获取当前状态,返回未来
NEXT
在 Windows 上安装 Doom Emacs