案例
下面的代码来自我们某一工具源码(Python语言)中:
file_gz = gzip.GzipFile(file_name)
src_path, src_file = os.path.split(file_name)
tmp_file_name = os.path.join(path_name, src_file).strip('gz').strip('.')
tmp_file = open(tmp_file_name, 'wb')
tmp_file.writeline(file_gz.realines())
file_gz.close()
tmp_file.close()
os.remove(file_name)
从代码健壮角度来看,存在如下两个问题:
- 缺少捕获异常,在GzipFile打开文件,open打开文件之后的操作都可能抛出异常
- 当抛出异常时,file_gz与tmp_file就会出现未正常close,存在文件句柄的泄露问题
能正确释放资源的建议写法是: