(七)常用模块----(六)
目录
7.1包
a.创建一个目录
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/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)
b.文件内容
#policy.py
def get():
print('from policy.py')
#versions.py
def create_resource(conf):
print('from version.py: ',conf)
#manage.py
def main():
print('from manage.py')
#models.py
def register_models(engine):
print('from models.py: ',engine)
c.import,import...as...
import glance.api.policy
glance.api.policy.get()
import glance.api.policy as policy
policy.get()
#from policy.py
d.from...import...,from...import...as...
import后面不可以带点(.),如from glance import api.policy就是错误的
from glance.api import policy
policy.get()
from glance.api.policy import get
get()
#from policy.py
e.__init__.py
下面代码执行是否有问题,如果有问题如何解决
import glance
glance.api.policy
执行glance包不能打开内部的文件,但会自动打开__init__.py文件
验证我们在__init__.py文件增加代码
import glance
#
说明__init__.py被自动打开了
所以我们在__init__.py文件中添加下图代码就可以完成一开始有问题的代码
这样我们就解决了问题
import glance
glance.api.policy.get()
#from policy.py
f.绝对路径和相对路径
上面所述就是绝对路径
绝对路径:以glance作为起始,文件不可以移动,但是直观
使用绝对路径 不管在包内部还是外部 导入了就能用
相对路径:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
可以随意移动包 只要能找到包的位置,就可以使用包里的模块
包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了
.本层文件
..上层文件
这样我们就可以随意移动glance包到一个新的文件夹里也不需要大量修改__init__.py
from 新包 import glance
glance.api.policy.get()
#from policy.py
7.2异常处理
使用try和except就能处理异常
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
except支持多分支
有没有一个能处理所有错误的类型 : Exception
有了万能的处理机制仍然需要把能预测到的问题单独处理,单独处理的所有内容都应该写在万能异常之前
else : 没有异常的时候执行else中的代码
try:
ret = int(input('number >>>'))
print(ret*'*')
except ValueError:
print('输入的数据类型有误')
except Exception:
print('有错误')
try:
ret = int(input('number >>>'))
print(ret*'*')
except Exception as error:
print('错误',error)
finally : 不管代码是否异常,都会执行,finally和return相遇的时候 依然会执行 ,函数里做异常处理用,不管是否异常去做一些收尾工作
def func():
try:
f = open('file','w')
return True
except:
return False
finally:
print('执行finally了')
f.close()
print(func())