美文网首页
初识python的简洁和优雅之with

初识python的简洁和优雅之with

作者: 改变从分享开始 | 来源:发表于2018-05-19 10:14 被阅读0次

       刚学习了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技术。至于这个技术后面学习后在记录对其的理解。

相关文章

网友评论

      本文标题:初识python的简洁和优雅之with

      本文链接:https://www.haomeiwen.com/subject/ezlodftx.html