Python入门学习笔记(六)——永久存储、异常处理

Python(六)

目录

Python(六)

Python之永久存储(pickle模块)

永久存储一个列表

永久存储一个字典

Python之异常处理(Exception)

常见异常

异常检测


Python之永久存储(pickle模块)

存储成一个二进制数列

       存放:pickling

       读取:unpickling

 

永久存储一个列表

 

>>> import pickle
>>> my_list = [123,3.14159,'China',['another list']]
>>> pickle_file = open('E:\hyx02\Python学习\my_list.pkl','wb')
>>> pickle.dump(my_list,pickle_file)
>>> pickle_file.close

my_list.pkl中的后缀名写什么都可以。

上面的dump()方法:

pickle.dump(obj, file, [,protocol])

序列化对象,将对象obj保存到文件file中去。参数protocol是序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),protocol的值还可以是1和2(1和2表示以二进制的形式进行序列化。其中,1是老式的二进制协议;2是新二进制协议)。file表示保存到的类文件对象,file必须有write()接口,file可以是一个以'w'打开的文件或者是一个StringIO对象,也可以是任何可以实现write()接口的对象。

测试一下刚才的存储结果:

>>> pickle_file = open('E:\hyx02\Python学习\my_list.pkl','rb')
>>> my_list2 = pickle.load(pickle_file)
>>> print(my_list2)
[123, 3.14159, 'China', ['another list']]

代码中的rb:二进制形式

 

同理:

永久存储一个字典

我们可以利用这种方法把数据做成一个数据包

例如:把一个字典(很多城市的信息)写成一个包

>>> import pickle
>>> pickle_file=open('E:\hyx02\Python学习\city_data.aaa','wb')
>>> city={'北京':'简称“京”,古称燕京、北平,是中华人民共和国首都、省级行政区、直辖市、国家中心城市、超大城市,国务院批复确定的中国政治中心、文化中心、国际交往中心、科技创新中心。','上海':'简称“沪”,是中华人民共和国省级行政区、直辖市、国家中心城市、超大城市,国务院批复确定的中国国际经济、金融、贸易、航运、科技创新中心。截至2018年,全市下辖16个区,总面积6340.5平方千米,2019年,常住人口2428.14万人,户籍常住人口1450.43万人,外来常住人口977.71万人。','广州':'简称“穗”,别称羊城、花城,是广东省省会、副省级市、国家中心城市、超大城市,国务院批复确定的中国重要的中心城市、国际商贸中心和综合交通枢纽。','杭州':'简称“杭”,古称临安、钱塘,是浙江省省会、副省级市、杭州都市圈核心城市,国务院批复确定的中国浙江省省会和全省经济、文化、科教中心、长江三角洲中心城市之一。','深圳':'简称“深”,别称鹏城,是广东省副省级市、计划单列市、超大城市,国务院批复确定的中国经济特区、全国性经济中心城市和国际化城市。'}
>>> pickle.dump(city,pickle_file)
>>> pickle_file.close()

然后调用时:

>>> import pickle
>>> pickle_file=open('E:\hyx02\Python学习\city_data.aaa','rb')
>>> city2 = pickle.load(pickle_file)
>>> city2
{'北京': '简称“京”,古称燕京、北平,是中华人民共和国首都、省级行政区、直辖市、国家中心城市、超大城市,国务院批复确定的中国政治中心、文化中心、国际交往中心、科技创新中心。', '上海': '简称“沪”,是中华人民共和国省级行政区、直辖市、国家中心城市、超大城市,国务院批复确定的中国国际经济、金融、贸易、航运、科技创新中心。截至2018年,全市下辖16个区,总面积6340.5平方千米,2019年,常住人口2428.14万人,户籍常住人口1450.43万人,外来常住人口977.71万人。', '广州': '简称“穗”,别称羊城、花城,是广东省省会、副省级市、国家中心城市、超大城市,国务院批复确定的中国重要的中心城市、国际商贸中心和综合交通枢纽。', '杭州': '简称“杭”,古称临安、钱塘,是浙江省省会、副省级市、杭州都市圈核心城市,国务院批复确定的中国浙江省省会和全省经济、文化、科教中心、长江三角洲中心城市之一。', '深圳': '简称“深”,别称鹏城,是广东省副省级市、计划单列市、超大城市,国务院批复确定的中国经济特区、全国性经济中心城市和国际化城市。'}

就可以精简程序了

 

Python之异常处理(Exception)

file_name = input('请输入需要打开的文件名:')
f = open(file_name)
print('文件的内容是:')
for each_line in f:
    print(each_line)

输入错误文件名:抛出找不到文件异常FileNotFoundError

FileNotFoundError: [Errno 2] No such file or directory: 'aaa'

常见异常

AssertionError:断言语句(assert)失败

>>> my_list = ['aaaaa']
>>> assert len(my_list) > 0
>>> my_list.pop()
'aaaaa'
>>> assert len(my_list) > 0
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    assert len(my_list) > 0
AssertionError

抛出AssertionError异常,assert作为程序中间的检查点

如下图:

AttributeError:尝试访问未知的对象属性

>>> my_list.aaa
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    my_list.aaa
AttributeError: 'list' object has no attribute 'aaa'

抛出AttributeError异常,如下图:

IndexError:索引超出序列的范围

KeyError:不存在的Key

>>> my_dict = {'one':1,'two':2,'three':3}
>>> my_dict['fout']
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    my_dict['fout']
KeyError: 'fout'

抛出KeyError异常,如下图:

#用get()方法不会抛异常

NameError:访问不存在的变量

OSError:操作系统产生的异常,有很多,比如最开始的FileNotFoundError就属于OSError

OverflowError:数值运算超出最大限制,Python中不常见

SyntaxError:Python的语法错误

>>> print 'aaa'
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('aaa')?

抛出语法错误,没有括号,要变成函数调用的形式

如下图:

TypeError:无法计算,例如不同类型之间运算

ZeroDivisionError:除数为0

      

异常检测

try_except语句

try:

    检测范围

except Exception[as reason]:

     出现异常(Exception)后的处理代码

例子:

try:
    f = open('xxx.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错啦~\n错误的原因是:'+str(reason))
except TypeError as reason:
    print('类型出错啦~\n错误的原因是:'+str(reason))

运行结果如下图:

 

try:
    sum = 1 + '1'
    f = open('xxx.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错啦~\n错误的原因是:'+str(reason))
except TypeError as reason:
    print('类型出错啦~\n错误的原因是:'+str(reason))

运行结果如下图:

也可以合并写作:

except (OSError,TypeError) as reason:
    print('出错啦~\n错误的原因是:'+str(reason))

但是不推荐上述try_except语句,比如由于程序中断而导致的没有关闭文件,于是有: try-finally语句

 

try-finally语句

try:

    检测范围

except Exception[as reason]

    出现异常(Exception)后的处理代码

finally:

    无论如何都会被执行的代码

例子:

try:
    f = open('xxx.txt')
    print(f.read())
    sum = 1 + '1'
except (OSError,TypeError) as reason:
    print('出错啦~\n错误的原因是:'+str(reason))
finally:
    f.close()

 

raise语句

>>> raise ZeroDivisionError('除数为0的异常')

显示上述解释内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值