Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文件打开并写入,无法获取要执行的异常路径_Python_Python 2.7 - Fatal编程技术网

Python 文件打开并写入,无法获取要执行的异常路径

Python 文件打开并写入,无法获取要执行的异常路径,python,python-2.7,Python,Python 2.7,我试图优雅地处理请求过多跟踪内存的情况,这会导致内存分配失败。这是我的python脚本,它是从主脚本中提取出来的,并简化为这个问题(20秒的睡眠只是为了让我可以用free-m观察内存分配和释放步骤): 我明白了: $sudo./test.py 在文件对象析构函数中关闭失败: IOError:[Errno 12]无法分配内存 路径是通过非异常路由 睡20秒 ^C SIGINT:在退出之前强制清除。 我的问题是:我做错了什么?当分配失败时,我如何使用路径获得它 我想我总是可以在返回后检查值,看看它

我试图优雅地处理请求过多跟踪内存的情况,这会导致内存分配失败。这是我的python脚本,它是从主脚本中提取出来的,并简化为这个问题(20秒的睡眠只是为了让我可以用
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:
   ...