Python程序退出时出错:“0”;文件对象析构函数“中的关闭失败”&引用;sys.EXPEPTHOOK缺失“1;
在python代码的最后一行(print语句)之后,出现以下错误:Python程序退出时出错:“0”;文件对象析构函数“中的关闭失败”&引用;sys.EXPEPTHOOK缺失“1;,python,linux,sys,Python,Linux,Sys,在python代码的最后一行(print语句)之后,出现以下错误: close failed in file object destructor: sys.excepthook is missing lost sys.stderr 有人知道这可能是从哪里来的吗 更新:我的python代码非常长,但我将发布可能与此错误有关的部分: 首先,在进程开始时,我将stdout和stderr重定向到如下日志文件: so = se = open(logfile, 'w', 0)
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
有人知道这可能是从哪里来的吗
更新:我的python代码非常长,但我将发布可能与此错误有关的部分:
首先,在进程开始时,我将stdout和stderr重定向到如下日志文件:
so = se = open(logfile, 'w', 0)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
虽然我一直都在这样做,但从未遇到过这种错误,但这似乎是我看到这种情况的最可能原因。在我的主要函数的末尾添加以下语句可以为我解决这个问题:
try:
sys.stdout.close()
except:
pass
try:
sys.stderr.close()
except:
pass
冲水和关门对我来说很有效
sys.stdout.flush()
sys.stdout.close()
sys.stderr.flush()
sys.stderr.close()
调用程序时,您如何处理错误(
stderr
)流?您是否导入了自己编写的名为sys
的模块?我认为错误可能来自您的代码,但由于您没有向我们展示任何错误,世界可能永远不会知道。@jwodder hah,代码非常长,我不知道哪些部分与此错误相关,所以我没有发布任何东西来验证您发布的部分是否足以重现问题。有关创建最小、完整、可验证示例的规则,请参见。是的,这意味着在提问之前你需要自己做一些工作。user20408的答案对我很有用。这个答案同样有效,并显示了一条新的错误消息:sys.stdout.flush()IOError:[Errno 32]管道破裂