You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:39:51