Python中print()语句为何会引发[Errno 9] Bad file descriptor错误?
print()触发[Errno 9] Bad file descriptor的原因
当然有可能,这类随机错误的核心原因是标准输出(stdout)的文件描述符被意外关闭或失效,结合单元测试场景,常见触发点包括:
- 代码或测试框架中存在
sys.stdout.close()这类操作,关闭了stdout后,后续的print()仍试图向这个已失效的文件描述符写入。单元测试的执行顺序、并发(多线程/多进程测试)的随机性,导致错误时有时无。 - 测试环境里stdout被重定向到临时文件、管道或其他资源,而这些资源在
print()调用前就被提前关闭了,写入操作自然会触发文件描述符无效的错误。 - 多线程/多进程测试场景下,某个线程/进程退出时误关闭了全局的stdout,其他线程的
print()调用就会失败。
移除print()后,不再有写入无效文件描述符的操作,错误自然消失。
可以从这几个方向排查:
- 检查代码中是否有直接操作
sys.stdout的逻辑,比如关闭、替换后未正确恢复。 - 如果用了多线程/多进程测试,确认是否有子线程/子进程在退出时误关了stdout。
- 查看测试框架的配置,是否有捕获输出后未正确还原stdout的情况。
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

