python-day21_包_跨目录调用_异常处理

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'))
# l.append(open('glance/db/__init__.py','w'))
# map(lambda f:f.close() ,l)

 

1),包的目录下面,以及子目录下面,都应该有__init__.py文件

2),当包的根目录被导入,根目录下的__init__.py被执行,在__init__.py内执行子目录的导入,以及根目录下py文件的导入

3),子目录下也有__init__.py,子目录的__init__.py,执行本地目录内py文件的导入

4),包的导入有sys.path来指定根路径,根目录和子目录的__init__.py,以当前python程序的执行目录为根目录

只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

 

https://www.cnblogs.com/eva-j/articles/7292109.htm

 

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

# from dir import glance
# glance.api.policy.get()
# 相对路径
# 可以随意移动包,只要能找到包的位置,就可以使用包里的模块
# 包里的模块如果想调用其它模块的内容只能使用相对路径,但直接以包内的模块为根来运行,路径会不支持

 

路径:

glance//api//policy.py

glance--__init__.py内容

from . import api
from . import cmd
from . import db
glance--__init__.py内容

api--__init__.py内容

from . import policy
from . import versions
api--__init__.py内容

 

 程序开发规范:

bin\start.py

if __name__ == '__main__':
    core.main()
core\core.py

shopping()
pay()
main()

 

 2,

程序结构如下:

-- src
|-- mod1.py
|-- lib
| |-- mod2.py
|
|-- sub
| |-- test2.py

这里想要实现test2.py调用mod1.py和mod2.py ,做法是我们先跳到src目录下面,直接可以调用mod1,然后在lib上当下建一个空文件__init__.py ,就可以像第二步调用子目录下的模块一样,通过import  lib.mod2进行调用了。具体代码如下:

import sys
sys.path.append("..")
os.chdir('..')
import mod1 import mod2.mod2

 

 3,异常处理

# 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相遇的时候,即使return在前面结束,依然会执行finally后面的代码
    # 函数里做异常处理用,不管是否异常,都去做一些收尾工作

 

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

 

posted @ 2019-01-16 20:34  烟云过眼  阅读(160)  评论(0编辑  收藏  举报