如何阻止ipython关闭失败的执行的打开文件句柄

时间:2017-01-11 00:36:34

标签: python io ipython

我尝试调试一些IO代码,但是在异常期间文件会保持关闭状态。

使用以下剪辑

with open('test', 'w') as fid:
    fid.write('a')
    1/0

In [1]: %run test.py
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
***/test.py in <module>()
      1 with open('test', 'w') as fid:
      2         fid.write('a')
----> 3         1/0

ZeroDivisionError: division by zero

In [2]: %debug
***/test.py(3)<module>()
      1 with open('test', 'w') as fid:
      2         fid.write('a')
----> 3         1/0

ipdb> fid.write('b')
*** ValueError: I/O operation on closed file.

应说明我的意思。我确实意识到关闭文件句柄,无论file上下文管理器有什么意义。但是,由于堆栈跟踪由IPython(5.1)保留,因此应该可以在同一位置打开文件 - 假设文件在此期间未被更改。

1 个答案:

答案 0 :(得分:0)

应该这样。执行完所有语句后,with open(filename, access_mode, buffering) as var的用法为immediately close the file。来自Python Docs:

  

执行语句后,即使在处理行 时遇到问题,文件f也始终关闭, 。提供预定义清理操作的其他对象将在其文档中指出这一点。

重点是我的。所以,你必须以老式的方式打开文件:

file_name = open("test", "w")
# insert rest of statements here
file_name.close()