zoukankan      html  css  js  c++  java
  • 六.自定义函数(三)

    1.使用IDLE的异常信息:

    try:

      data=open('missing.txt')

      print(data.readline(),end='')

    """为异常对象给定一个名,然后作为错误消息的一部分"""

    except IOError as err:

    """使用str()BIF要求异常对象表现为一个字符串"""

      print('File error:'+str(err))

    finally:

    """文件不存在时,数据文件对象并未创建,这样就不可能在数据对象上调用close()方法,尝试调用close()之前先查看data名是否存在"""

      if 'data' in locals():

        data.close()

    2.用with处理文件:优化后的代码最终版

    man=[]

    other=[]

    try:

      data=open('sketch.txt')

      for each_line in data:

        try:

          (role,spoken_line)=each_line.split(':',1)

          spoken_line=spoken_line.strip()

        if role =='Man':

          man.append(spoken_line)

        elif role =='Other Man':

          other.append(spoken_line)

        except ValueError:

          pass

    except IOError as :

      print('the data file is missing')

    try:

    """with语句不再需要包含一个finally组来处理文件的关闭"""

      with open('man_data.txt','w') as man_file:

        print(man,file=man_file)

      with open('other_data.txt','w') as other_file

        print(other,file=other_file)

    except IOError as err:
      print('File error:'+str(err))

    3.优化输出的数据格式:修改之前的print_lol()函数,让它把数据输出到一个磁盘文件而不是显示在屏幕上(标准输出)

    步骤:向print_lol()函数增加第4个参数,用来标识将把数据写入哪个位置,要为这个参数提供一个缺省值sys.stdout

    def print_lol(the_list,indent=False,level=0,fn=sys.stdout):

      for each_item in the_list:

        if isinstance(each_item,list):

          print_lol(each_item,indent,level+1,fn)

        else:

          if indent:

              for tab_stop in range(level):

                print(" ",end='',file=fh)

          print(each_item,file=fh)

    这时,将之前的代码中的print()改用print_lol(),调用的格式为print_lol(man,fh=man_file)和print_lol(man,fh=other_file)

    4.使用pickle标准库“腌制”数据并持久存储:用dump保存,用load恢复

    用dump代替print_lol()函数:

    import pickle

    man=[]

    other=[]

    try:

      data=open('sketch.txt')

      for each_line in data:

        try:

          (role,spoken_line)=each_line.split(':',1)

          spoken_line=spoken_line.strip()

        if role =='Man':

          man.append(spoken_line)

        elif role =='Other Man':

          other.append(spoken_line)

        except ValueError:

          pass

    except IOError:

      print('the data file is missing')

    try:

    """将访问模式改为可写二进制模式"""

      with open('man_data.txt','wb') as man_file,with open('other_data.txt','wb') as other_file

    """将两个nester.print_lol()调用替换为pickle.dump()调用"""

       pickle.dump(man,man_file)

       pickle.dump(other,other_file)

    except IOError as err:
      print('File error:'+str(err))

    except pickle.PickleError as perr:

      print('Pickling error:'+str(err))

    5.使用pickle和nester来解除腌制的数据:创建一个空列表来存放解除腌制的数据:

    new_man=[]

    try:

      with open('man_data.txt','rb') as man_file:

        new_man=pickle.load(man_file)

    except IOError as err:

      print('File erro:'+str(err))

    except pickle.PickleError as perr:

      print('Pickling error:'+str(err))

    nester.print_lol(new_man)

  • 相关阅读:
    1.border-image
    CSS3 3D transform
    js表单的focus()与blur()方法
    jquery背景backgroundPosition插件
    数字反转
    js的字符串charAt()方法
    FormData使用方法详解
    封装自己的jquery插件
    webpack打包vue项目之后怎么启动&注意事项
    JavaScript中的async/await
  • 原文地址:https://www.cnblogs.com/chenshaoping/p/7219038.html
Copyright © 2011-2022 走看看