模块and包
1.异常处理:
1 try: 2 print('***************') 3 print(xxxxxxxxxxxxxx) #先来一个Name错误试试水 4 except KeyError as x: #KeyError专门用来接收Key错误 5 print('这是个Key的错误') 6 except NameError as e: #NameError专门用来接收Name错误 7 print('名字类型的错误!') 8 except Exception: #Exception专门用来接收所有类型错误 9 print('捕捉所有的异常!') 10 else: 11 print('你若安好,便是晴天!') 12 finally: 13 print('管你什么鬼,都要执行我!') 14 print('结束了!')
2.模块:
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
3.为什么要使用模块:
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用
4.如何使用模块:
spam模块:
1 #spam.py 2 print('from the spam.py') 3 4 money=1000 5 6 def read1(): 7 print('spam->read1->money',1000) 8 9 def read2(): 10 print('spam->read2 calling read') 11 read1() 12 13 def change(): 14 global money 15 money=0
导入模块并引用:
import导入方法:
1 import spam 2 money=999 3 spam.part1() 4 spam.part2() 5 spam.change() 6 spam.part1() 7 spam.part2() 8 print(spam.money)
form..import导入模块方法:
1 from spam import money,part1,part2,change 2 money=999 3 part1() 4 part2() 5 change() 6 part1() 7 part2() 8 print(money)
首次导入模块要做的三件事:
1.创建名称空间,用来存放spam.py中定义的名字
2.基于创建的名称空间来执行spam.py
3.名字spam指向该名称空间spam,名字的操作都是以spam.py为准
如果是from spam import * 导入所有模块,可以在模块中加入一个__all__=[''] 来控制*
5.模块搜索路径:
内置模块->sys.path
查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
6.包:
无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法!
包的本质就是一个包含__init__.py文件的目录
凡是导入时带点的,点的左边必须是一个包.
需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:
form a import b.c 是错误语法!
绝对导入:
from name.cmd import manage
manage.main()
相对导入:
from .. cmd import manage
manage.main()
测试的结果一定要在包的顶级包的同级文件中测试
PS:可以用import导入内置或者第三方模块,但是绝对要避免使用import来导入自定义包的子模块,应该使用from...import...的绝对或者相对导入,且包的相对导入只能用from的形式.
--------------------------------------------END--------------------------------------------