为什么在显式关闭stdout时会出现ValueError?

non*_*all 4 python stdout python-3.x

Python新手在这里.我正在编写一个脚本,可以将一些输出转储到文件或stdout,具体取决于传递给它的参数.在解释参数时,我会分配一个open'ed文件或stdout一个名为的全局变量output_file,无论选择哪种类型的流,脚本的其余部分都可以使用该变量来写输出.在剧本的最后我close output_file.这适用于文件流,虽然对于stdout来说是多余的,但我使用其他编程语言的经验表明,在程序结束之前显式关闭stdout 没有任何害处.

但是,每当stdout用于输出(并随后关闭)时,我得到一个"ValueError:'对已关闭文件的I/O操作.'".我知道这个错误不是由我调用close stdout直接产生的,而是在我的脚本返回后发生的.我的问题是:为什么会发生这种情况,有没有办法手动关闭stdout而不触发它?(我知道只有在选择文件时才能通过有条件地关闭流来轻松解决问题,但我想知道是否/为什么这是必要的.)

非常简单的示范片段:

from sys import stdout
stdout.close()
Run Code Online (Sandbox Code Playgroud)

Rik*_*ggi 5

问题是,在python-3.2没有检查它是否已关闭的情况下,尝试关闭以刷新标准输出.

问题13444与此有关.

修复补丁python-2.7后的版本中不应该出现此问题.