如何使用print语句调试?终端未显示print输出的问题排查
关于使用print调试及Flask中print输出不显示的问题解答
嘿,我来帮你搞定这两个问题,结合你给出的Flask代码片段,给你详细说明:
一、如何用print语句做调试
print是最简单直接的调试方式,在你的代码里灵活插入就行:
- 查看变量/状态:在关键步骤插入print,把你想观察的内容传进去。比如在你的分类遍历循环里,这样加:
for category in categories: # 打印当前处理的分类名称,确认循环是否正常遍历 print(f"正在处理分类:{category.name}(ID:{category.id})") categoryItems = session.query(CatalogItem).filter_by(category_id=category.id).all() # 打印该分类下的条目数量,验证查询结果是否符合预期 print(f"该分类下找到{len(categoryItems)}个条目") - 打印对象细节:如果想查看对象的所有属性,直接打印对象的
__dict__属性就行,比如print(category.__dict__),能看到这个Category对象的所有字段和值。 - 标记调试点:为了在一堆输出里快速定位,给print加个标识文本,比如
print("=== 进入categoriesJSON函数开始处理 ==="),这样一眼就能找到对应的调试输出。
二、终端看不到print输出的常见原因及解决办法
结合你用的Flask应用,大概率是这几个情况:
- 没开Flask调试模式:默认情况下Flask会缓冲输出,开启调试模式后会实时把print内容输出到终端。启动应用时加上
debug=True:
或者用环境变量开启:Linux/macOS终端输入if __name__ == '__main__': app.run(debug=True)export FLASK_DEBUG=1,Windows终端输入set FLASK_DEBUG=1,再启动你的application.py。 - 输出被Python缓冲了:Python的标准输出在某些场景下会攒够一定内容才输出,你可以强制刷新输出流,比如:
或者启动脚本时加import sys print("调试信息", flush=True)-u参数禁用缓冲:python -u application.py。 - 请求没触发目标路由:可能你访问的路径不对,导致
categoriesJSON函数根本没执行,自然看不到print输出。先确认你访问的是http://localhost:5000/catalog/json(端口号看你Flask的配置),触发这个路由后再看终端。 - 日志配置把输出导走了:如果你的应用配置了logging模块,可能把标准输出重定向到日志文件了。检查代码里有没有类似
logging.basicConfig(filename='app.log', level=logging.INFO)的配置,去对应的日志文件里找找print内容。 - 找错了终端窗口:有时候启动Flask的终端被你最小化或者切换了,一定要看启动
application.py的那个终端窗口哦。
内容的提问来源于stack exchange,提问作者digi_life
相关产品推荐
相关产品推荐

