Python中手动写入stderr为何会屏蔽其他异常的错误信息?
问题原因解析
在类Unix系统中,文件描述符2对应标准错误输出(stderr),默认它指向当前终端,所以程序的错误信息会直接显示在Shell里。
你代码里的核心问题出在这两行:
f = open(2, 'w') f.close()
open(2, 'w')会把Python的文件对象和已存在的stderr文件描述符(fd2)绑定到一起;- 当你调用
f.close()时,会直接关闭文件描述符2。
之后再执行raise Exception或者1/0时,Python试图向stderr写入错误信息,但此时进程的stderr文件描述符已经被关闭了,没法把内容输出到终端,所以你看不到任何错误提示。
要是想验证这个逻辑,可以在关闭fd2后重新打开它:
import os os.open(2, os.O_WRONLY)
这时候再触发错误,就能重新在Shell里看到错误信息了。
内容的提问来源于stack exchange,提问作者Amir reza Riahi
相关产品推荐
相关产品推荐

