今日主要内容:
序列化模块的复习
‘包’的简单理解
模块的高级导入方法
异常处理
计算机的点拨
一,序列化模块
序列化模块
# 数据类型转化成字符串的过程就是序列化
# 为了方便存储和网络传输
# json
# dumps
# loads
# dump 和文件有关
# load load不能load多次
# pickle
#方法和json一样
#dump和load的时候 文件是rb或者wb打开的
#支持python所有的数据类型
#序列化和反序列化需要相同的环境
# shelve
# open方法
# open方法获取了一个文件句柄
# 操作和字典类似
# 模块的导入
# import
# from import
# as重命名
# 都支持多名字导入
# sys.moudles记录了所有被导入的模块
# sys.path 记录了导入模块的时候寻找的所有路径
二,包的简单理解
1,创建文件夹方法
import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py', 'w'))
l.append(open('glance/api/__init__.py', 'w'))
l.append(open('glance/api/policy.py', 'w'))
l.append(open('glance/api/versions.py', 'w'))
l.append(open('glance/cmd/__init__.py', 'w'))
l.append(open('glance/cmd/manage.py',' w'))
l.append(open('glance/db/models.py',' w'))
map(lambda f: f.close(), l)
2,导入方法
1. __init__.py 文件的功能
2. 两种导入方法:
from . import * :从当前路径导入
from .. import * :从上一目录导入
3,相对路径和绝对路径
# 使用绝对路径 不管在包内部还是外部 导入了就能用
# 不能挪动,但是直观
# 相对路径
# 可以随意移动包 只要能找到包的位置,就可以使用包里的模块
# 包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了
'''
总结:
模块导入分为三种方法:
1.绝对导入
2.相对导入
3.*和all配合(也算相对导入)
'''
三,异常处理
1,基本知识点
# 程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
# 使用try和except就能处理异常
# try是我们需要处理的代码
# except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行except中的代码
# except支持多分支
# 有没有一个能处理所有错误的类型 : Exception
# 有了万能的处理机制仍然需要把能预测到的问题单独处理
# 单独处理的所有内容都应该写在万能异常之前
# else : 没有异常的时候执行else中的代码
# finally : 不管代码是否异常,都会执行
# finally和return相遇的时候 依然会执行,先执行finally,最后才返回
# 函数里做异常处理用,不管是否异常去做一些收尾工作
2,case1
try:
print('1111')
print('2222')
#name
ret = int(input('number >>>'))
print(ret*'*')
except ValueError:
print('输入的数据类型有误')
except Exception:
print('你错了,老铁')
else:
print('没有异常的时候执行else中的代码')
finally:
print('''
无论代码是否正确:
该部分一定会执行!''')
输出结果:
1111
2222
number >>>python
输入的数据类型有误
无论代码是否正确:
该部分一定会执行!
3,case2
print('000000000')
def func():
try:
f = open('file', 'w')
return True
except:
return False
finally:
print('执行finally了')
f.close()
print(func())
# 明确:这里是先执行finally 的内容,然后才打印返回值
输出结果:
0000000000000
执行finally了
True
4,case3
try:
print('1111')
name
ret = int(input('number >>>'))
print(ret*'*')
except Exception as error:
print('''你错了!老铁!
你错误的原因是:{}'''.format(error))
输出结果:
1111
你错了!老铁!
你错误的原因是:name ‘name’ is not defined