浏览 3199 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-31
最后修改:2009-03-31
dest = open(store_path, 'wb+') failed = False try: for chunk in upload_file.chunks(): dest.write(chunk) dest.close() except: dest.close() #感觉写两个close(),不简洁。 try: os.remove(store_path) except: pass 或 failed = False dest = open(store_path, 'wb+') failed = False try: for chunk in upload_file.chunks(): dest.write(chunk) except: failed = True #因为要先关闭文件再删除,所以这里只能做标记。 finally: dest.close() if failed: try: os.remove(store_path) except: pass 新手,想从细节抓起。 谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-31
可以用with 来简化文件的关闭
|
|
返回顶楼 | |
发表时间:2009-03-31
class FileContext(object): def __init__(self,file): self.file=file def __enter__(self): pass def __exit__(self,exc_type,exc_value,traceback): try: self.file.close() finally: if exc_type is not None: os.remove(self.file.name) import os if __name__ == "__main__": f=open("path","wb+") with FileContext(f): raise IOError 参考官方文档。在py3.0下测试通过 http://docs.python.org/3.0/reference/compound_stmts.html#the-with-statement |
|
返回顶楼 | |
发表时间:2009-03-31
上面漏了一点,应该判断异常的类型是否为IOError或者其他的什么,不过这些你可以在__exit__里判断
|
|
返回顶楼 | |
发表时间:2009-03-31
# dest = open(store_path, 'wb+')
# try: # for chunk in upload_file.chunks(): # dest.write(chunk) # except: # try: # os.remove(store_path) # except: # pass # finally: # dest.close() # |
|
返回顶楼 | |
发表时间:2009-04-02
最后修改:2009-04-02
phyeas 写道 class FileContext(object): def __init__(self,file): self.file=file def __enter__(self): pass def __exit__(self,exc_type,exc_value,traceback): try: self.file.close() finally: if exc_type is not None: os.remove(self.file.name) import os if __name__ == "__main__": f=open("path","wb+") with FileContext(f): raise IOError 参考官方文档。在py3.0下测试通过 http://docs.python.org/3.0/reference/compound_stmts.html#the-with-statement 引用 # dest = open(store_path, 'wb+')
# try: # for chunk in upload_file.chunks(): # dest.write(chunk) # except: # try: # os.remove(store_path) # except: # pass # finally: # dest.close() # 用__exit__方法类似于c++中的析构函数 采用finally写法则类似于java中的写法 我觉得当时一个类来处理文件的话可以用_exit_ 用一个方法的话则选用finally |
|
返回顶楼 | |
发表时间:2009-04-14
不同意dogstar 的写法,在文件没关闭之前是无法删除文件的
也不同意spyker 的说法,可以在任意上下文中使用with。不局限于类或方法 |
|
返回顶楼 | |