day12(包和异常处理)

1.复习

序列化模块
    数据类型转化成字符串的过程就是序列化
    为了方便存储和网络传输
    json
        dumps
        loads
        dump  和文件有关
        load  load不能load多次

import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
print(json_dic2)

    pickle
        方法和json一样
        dump和load的时候 文件是rb或者wb打开的
        支持python所有的数据类型
        序列化和反序列化需要相同的环境
    shelve
        open方法
        open方法获取了一个文件句柄
        操作和字典类似

模块的导入
import
from import
as重命名
都支持多名字导入
sys.moudles记录了所有被导入的模块
sys.path 记录了导入模块的时候寻找的所有路径

2.包

把解决一类问题的模块放在同一个文件夹里 —— 包
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)

import glance.api.policy as policy
policy.get()

from dir.glance.api import policy
policy.get()

import sys
sys.path.insert(0,'C:\\Users\\Administrator\\PycharmProjects\\s9\\day21\\dir')
# print(sys.path)
from glance.api import policy
policy.get()

from dir import glance
glance.db.models.register_models('mysql')
glance.api.policy.get()

使用绝对路径 不管在包内部还是外部 导入了就能用
不能挪动,但是直观

from dir import glance
glance.api.policy.get()
相对路径
可以随意移动包 只要能找到包的位置,就可以使用包里的模块
包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了

3.异常处理

1/0
name
2+'3'
[][3]
{}['k']
try:
    print('1111')
    # 1/0
    print('2222')
    # name
    # 2+'3'
    # [][3]
    # {}['k']
    ret = int(input('number >>>'))
    print(ret*'*')
except ValueError:
    print('输入的数据类型有误')
except Exception:
    print('你错了,老铁')
else:
    print('没有异常的时候执行else中的代码')
print('===========')
def func():
    try:
        f = open('file','w')
        ''''''
        return True
    except:
        return False
    finally:
        print('执行finally了')
        f.close()

print(func())

程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
使用try和except就能处理异常
    try是我们需要处理的代码
    except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行except中的代码
    except支持多分支
    有没有一个能处理所有错误的类型 : Exception
        有了万能的处理机制仍然需要把能预测到的问题单独处理
        单独处理的所有内容都应该写在万能异常之前
    else : 没有异常的时候执行else中的代码
    finally : 不管代码是否异常,都会执行
        finally和return相遇的时候 依然会执行
        函数里做异常处理用,不管是否异常去做一些收尾工作
try:
    main()
except Exception:
    pass

try:
    print('1111')
    # 1/0
    print('2222')
    # name
    # 2+'3'
    # [][3]
    # {}['k']
    ret = int(input('number >>>'))
    print(ret*'*')
except Exception as error:
    print('你错了,老铁',error)

猜你喜欢

转载自blog.csdn.net/qq_36227329/article/details/81220590