zoukankan      html  css  js  c++  java
  • 【转】简单介绍Python中的try和finally和with方法

    作者:xrzs 字体:[增加 减小] 类型:转载 

    用 Python 做一件很平常的事情: 打开文件, 逐行读入, 最后关掉文件; 进一步的需求是, 这也许是程序中一个可选的功能, 如果有任何问题, 比如文件无法打开, 或是读取出错, 那么在函数内需要捕获所有异常, 输出一行警告并退出. 代码可能一开始看起来是这样的:

    def read_file(): 
      try: 
        f = open('yui', 'r') 
        print ''.join(f.readlines()) 
      except: 
        print 'error occurs while reading file'
      finally: 
        f.close()

        不过这显然无法运作, 因为  f  是在  try  块中定义的, 而在  finally  中无法引用.

        如果将  f  提取到  try  块外部, 如

    def read_file(): 
       f = open('azusa', 'r') 
      try: 
        print ''.join(f.readlines()) 
      except: 
        print 'error occurs while reading file'
      finally: 
        f.close()

    那么, 问题在于当打开文件失败, 抛出异常将不会被捕获.

        挫一点的方法自然是, 再套一层  try  吧

    def read_file(): 
       try: 
        f = open('sawako', 'r') 
        try: 
          print ''.join(f.readlines()) 
        except: 
          print 'error occurs while reading file'
        finally: 
          f.close() 
       except: 
         print 'error occurs while reading file'

        当然这不仅仅是多一层缩进挫了, 连警告输出都白白多一次呢.

        正规一点的方式是, 使用 Python 引入的  with  结构来解决, 如

    def readFile(): 
      try: 
         with open('mio', 'r') as f: 
          print ''.join(f.readlines()) 
      except: 
        print 'error occurs while reading file'

        当文件打开失败时, 异常自然会被  except  到; 否则, 在  with  块结束之后, 打开的文件将自动关闭.

  • 相关阅读:
    Flex框架Cairngorm2 SequenceCommand用法封装
    SourceMate插件
    Cairngorm2 中SequenceCommand用法
    SourceMate出新版本了
    Flash Builder 4 安装ANT插件
    Text Layout Framework
    浅谈继承和组合
    Flex Ant脚本模板
    JS上传图片转化成Base64编码demo
    js动态改变iframe的高度
  • 原文地址:https://www.cnblogs.com/cccmon/p/8006465.html
Copyright © 2011-2022 走看看