Python 3.10中带end=''的print()输出异常问题求助
问题描述
我新建了Python 3.10环境,原有一段在Python 3.9.12中运行正常的代码,用于在同一行实时打印当前运行的算法,切换产品时换行。代码示例如下:
print('Product '+ prod + ' - algorithm: ', end='') # some code print('Arima ', end='') # some code running Arima print('Prophet ', end='') # some code running Prophet print('')
在Python 3.9中,会逐步输出内容,实时显示当前运行的算法;但在Python 3.10.6中,需等到执行完第四个print语句后才一次性输出所有内容,无法实时查看进度。不过在调试模式下输出正常,请问该行为变化的原因是什么?
原因分析
这是因为Python的标准输出缓冲策略在3.10版本中发生了细微调整:
- 当
print使用end=''且未触发换行时,Python 3.9默认采用行缓冲或自动刷新逻辑,每一次print的内容都会实时输出到控制台;而Python 3.10优化了标准输出的缓冲规则,默认会累积输出内容,直到遇到换行符(即最后一行print(''))才统一刷新缓冲区,所以无法实时看到进度。 - 调试模式下输出正常,是因为调试环境会强制禁用标准输出缓冲,确保每一次
print的内容都能立即显示。
内容的提问来源于stack exchange,提问作者Jose Simon
相关产品推荐
相关产品推荐

