我尝试调试一些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)保留,因此应该可以在同一位置打开文件 - 假设文件在此期间未被更改。
答案 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()