Python笔记(五):异常处理和数据存储

注:和上一篇有关联

(一)  finally 和 输出异常信息

try:

      the_man = open(r'C:\Users\123456\Desktop\test.txt')

      print(the_man.readline(),end="")

except IOError as err:

    #输出异常信息

    print("异常信息:"+ str(err))
#str()转换为字符串

finally:

    #不管是否发生异常一定会执行

    the_man.close()

(二)  使用 with

(1)   上面的代码如果文件不存在,就不会创建the_man对象,那么执行the_man.close()就会出现NameError错误,所以得先判断是否存在文件 test.txt是否存在

try:

      the_man = open('test.txt')

      print(the_man.readline(),end="")

except IOError as err:

    #输出异常信息

    print("异常信息:"+ str(err))

finally:

    #不管是否发生异常一定会执行

    if 'test.txt' in os.listdir():

        #判断当前工作目录是否存在 test.txt 文件,存在时才关闭文件

     the_man.close()

(2)   用(1)中的比较麻烦,可以使用with替代,下面的代码等价上面的代码。使用with时,PYTHON会自动去关闭文件。

try:

    with open('test.txt') as the_man:

      print(the_man.readline(),end="")

except IOError as err:

    #输出异常信息

    print("异常信息:"+ str(err))

(三)  通过open(),将数据写入文件。

man = [1,2,3]

try:

    with open('test.txt','w') as the_man:

      print(man,file=the_man)

        #man是要写入的数据, file= 是要写入的文件对象

except IOError as err:

    #输出异常信息

    print("异常信息:"+ str(err))

(四)  将数据长期存储

通过pickle 实现,代码如下。
import pickle
man = [1,2,3]
with open('the_man.pickle','wb') as saveman:

    pickle.dump(man,saveman)

    #保存数据
with open('the_man.pickle','rb') as resman:

    man = pickle.load(resman)

    #需要时恢复数据

print(man)

(五)  接上篇(笔记4),判断话是张三还是李四说的,分别添加到不同的列表,并存储到zs.txt和ls.txt中。

(1)   处理文件代码

from FirstPython import the_list as tl
#导入the_list模块

zs = []

ls = []

ww = []

try:

 with open(r'C:\Users\123456\Desktop\测试.txt',encoding='UTF-8') as the_file:

  for each_line in the_file:

      try:

          (role,line_spoken) = each_line.split(":",1)

          if role =='张三':

              # 如果role==张三,将line_spoken添加到man列表

           zs.append(line_spoken)

          elif role =='李四':

            ls.append(line_spoken)

          elif role == '王五':

            ww.append(line_spoken)

      except ValueError:

          # 出现ValueError时,直接输出 each_line的值

          print(each_line,end="")

 the_file.close()

except IOError:

    #找不到文件时提示文件不存在

    print("文件不存在!")

try:

 with open(r'C:\Users\123456\Desktop\zs.txt','w') as the_man:

     tl.dslist(zs,the_man)

     #调用dslist方法处理列表数据

 with open(r'C:\Users\123456\Desktop\ls.txt','w') as the_other:

     tl.dslist(ls,the_other)

     # 调用dslist方法处理列表数据

except IOError:

    print("文件不存在!")

(2)   处理列表数据的函数,模块名:the_list(Python笔记(二)中做过说明,这里做了一点修改)

def dslist(the_list,the_file):

    #the_list:要处理的列表数据

    #the_file:要写入的文件对象

    for each_line in the_list:

        if isinstance(each_line,list):

            #数据类型是否为列表

            dslist(each_line,the_file)

        else:

            print(each_line,file=the_file,end="")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

汇编语言 手记1

机器语言-汇编语言-高级语言 汇编语言特点: 1 与硬件相关 2 与机器指令一一对应 3 须详细描述如何做 4 可移植性差 CPU功能结构:   总线接口部件B...

23210
来自专栏pangguoming

Python相对、绝对导入浅析

这篇文章从另外一个不同的视角来分析一下Python的import机制,主要的目的是为了搞懂import中absolute、relative import遇到的几...

4187
来自专栏代码世界

Django之ModelForm详解

1564
来自专栏小狼的世界

SHELL技巧:处理文件名中的那些空格

现在很多人命名的时候都喜欢用空格,例如“An Introduction.doc”。但是这种命名方式给Linux命令行工具和Shell带来了困扰,因为大多数命令中...

1311
来自专栏happyJared

Linux私房菜:走进bash

减号-可用于连接一些特殊的stdin和stdout,像这个文件压缩和解压缩的示例:tar -cvf - /home | tar -xvf - -C /tmp/h...

862
来自专栏用户2442861的专栏

python操作redis简单例子

#2、配置  配置一下吧,默认配置文件在: “/etc/redis/redis.conf”  绑定ip:  “bind 127.0.0.1″ -> “b...

2212
来自专栏逸鹏说道

C# 温故而知新: 线程篇(二) 上

线程池和异步线程 目录: 1 什么是CLR线程池? 2 简单介绍下线程池各个优点的实现细节 3 线程池ThreadPool的常用方法介绍 4 简单理解下异步线程...

3199
来自专栏CodingToDie

Python学习(九):错误再多 我也要改正

当遇到错误的时候,有时我们并不想终止程序运行,遇到某些错误,我们想给用户一个友好的提示,告诉用户为什么出错,这也是必要的。

3666
来自专栏我的技术专栏

Socket编程实践(1) 基本概念

1124
来自专栏salesforce零基础学习

salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

1784

扫码关注云+社区

领取腾讯云代金券