Python 文件打开并写入,无法获取要执行的异常路径
我试图优雅地处理请求过多跟踪内存的情况,这会导致内存分配失败。这是我的python脚本,它是从主脚本中提取出来的,并简化为这个问题(20秒的睡眠只是为了让我可以用Python 文件打开并写入,无法获取要执行的异常路径,python,python-2.7,Python,Python 2.7,我试图优雅地处理请求过多跟踪内存的情况,这会导致内存分配失败。这是我的python脚本,它是从主脚本中提取出来的,并简化为这个问题(20秒的睡眠只是为了让我可以用free-m观察内存分配和释放步骤): 我明白了: $sudo./test.py 在文件对象析构函数中关闭失败: IOError:[Errno 12]无法分配内存 路径是通过非异常路由 睡20秒 ^C SIGINT:在退出之前强制清除。 我的问题是:我做错了什么?当分配失败时,我如何使用路径获得它 我想我总是可以在返回后检查值,看看它
free-m
观察内存分配和释放步骤):
我明白了:
$sudo./test.py
在文件对象析构函数中关闭失败:
IOError:[Errno 12]无法分配内存
路径是通过非异常路由
睡20秒
^C SIGINT:在退出之前强制清除。
我的问题是:我做错了什么?当分配失败时,我如何使用路径获得它
我想我总是可以在返回后检查值,看看它是否符合要求。失败时,它似乎会恢复到以前的值。刷新或关闭文件时会引发IOError
异常。您的代码没有显式关闭文件(当文件对象被垃圾收集时,它被隐式关闭),因此您的代码没有得到异常
更改此项:
try:
open(..., 'w').write(...)
except:
...
为此:
try:
with open(..., 'w') as fp:
fp.write(...)
except:
...
您应该正确地捕捉到您的IOError
对于记录,本例中带
的块是以下内容的简写:
try:
fp = open(..., 'w')
try:
fp.write(...)
finally:
fp.close()
except:
...
注意对close()
的显式调用将引发异常。“我想我总是可以在返回后检查值”检查什么的值?您似乎没有分配任何全局变量,没有改变任何值,也没有从任何部分返回任何内容。@abarnert:What is post就是这个问题的一个简化示例。我的意思是在返回后检查/sys/kernel/debug/tracing/buffer\u size\u kb
的内容。在我阅读接受的答案之前,我的第一个想法是“除了OP认为的块之外,IOError
异常不能发生在try
/块内”。我必须先声明fp吗?“我得到一个语法错误。@DougSmythies:对不起,我忘了行末的冒号。”。固定的
try:
fp = open(..., 'w')
try:
fp.write(...)
finally:
fp.close()
except:
...