为何在with open代码块中调用exit()会在终端打印31?
Python交互模式下调用exit()后输出31的原因
你在Python 3.9终端交互模式执行了这段代码:
>>> import csv >>> with open ("deleteMe", "w", newline="") as f: ... dmcsv = csv.writer(f) ... dmcsv.writerow(["this should be a line of text"]) ... exit() ... 31
终端输出的31是进程退出状态码,对应macOS(类Unix系统)里的SIGSYS信号,意味着进程触发了无效系统调用。
具体原因如下:
csv.writer.writerow()方法本身会返回写入的字符数,这里恰好是31;- 你在
with代码块内部直接调用exit(),会强制终止Python进程,此时with块的上下文清理逻辑(关闭文件、刷新缓冲区)还没执行,而writerow()的返回值被意外当成了进程退出码输出; - 直接输入
exit()时,Python会按正常流程完成所有清理后静默退出;你实际代码中遇到的“写入已关闭文件”错误,是文件已经被关闭后再尝试写入的场景,和当前强制终止进程的情况完全不同。
内容的提问来源于stack exchange,提问作者Kim Silverman
相关产品推荐
相关产品推荐

