刚学习了python处理文件,处理过程可以概括为:
#python 中一切皆对象,data是一个文件对象,open() BIF用来与文件交互
data = open("filename.txt")
#do something
#处理完文件之后就一定需要将文件关闭
data.close()
生活中无时无刻不在发生意外情况,那么程序也一样,我们不能只考虑程序正确运行的情况,必须要考虑意外情况,python里把这种意外称之为异常(exception)。只有正确地处理异常,才能保证程序的健壮性。python为我们提供了try/except/finally机制。现在我们将上面的伪代码改写:
#try、except、finally都是python中的关键字
#try代码块中是处理需求的代码,可能会导致一个运行时错误
try:
#open() 这个BIF默认地使用模式r表示读,这里需要打开文件完成写,所以需要指定使用模式w
data = open("filename.txt","w")
#do something
#except代码块用来处理,一般的except写法直接为except:,这里我特地指定了IOError
except IOError as ioerr:
#一般的方式是将错误打印在屏幕上,即标准输出
print('File Error'+str(ioerr))
#finally中的代码:不管出现什么错误都必须运行的代码
finally:
#locals()这个BIF会返回当前作用域下定义的所有名的一个集合
if data in locals():
#对于使用写模式打开的文件对象,close()方法就必须要使用
data.close()
因为try/except/finally在python中非常常用,所以就有了标题中的with语句,用with来抽象出相关的一些细节。尤其是文件处理工作中,with语句可以减少一些代码量。再将上面的代码改写
try:
#多个文件调用放到一行中
with open("filename.txt","w") as data, open("filename1.txt") as data1:
#do something
except IOError as ioerr:
print('File Error:'+str(ioerr))
PS:with语句利用了一种名为上下文管理协议(context management protocol)的python技术。至于这个技术后面学习后在记录对其的理解。
网友评论