包、模块与异常处理
模块
python中一个py文件就是一个模块
模块分为系统模块和自定义模块
怎么在一个模块中使用另外一个模块的内容
**注意:**如果希望一个模块能够被另外的模块使用,那么这个模块的模块名必须是标识符并且不是关键字
符合命名要求的模块中,只有全局变量可以被别的模块使用
导入模块
import 模块名 - 导入指定模块,导入后可以通过’模块名.'的方式使用模块中所有的全局变量
**from 模块名 import 全局变量1,全局变量2,… ** - 导入指定模块,导入后可以直接使用指定的全局变量
**from 模块名 import * ** - 导入指定模块,导入后可以直接使用所有的全局变量
import 模块名 as 新模块名 - 对模块重命名,重命名后使用模块的时候使用新模块名
导入模块原理
当通过import或者from-import导入一个模块的时候,系统会自动将这个模块中的代码全部执行一遍
在导入模块的时候会自动检测模块是否重复导入,如果已经导入过,不会重复导入
# 导入方式一:import
import random
random.randint(1,10) # 产生一个随机整数(1-10)
random.random() # 产生一个随机数(0-1)
# 导入方式二:from...import
from random import randint
randint(1,10) # 产生一个随机整数(1-10)
# random() # 报错
# 导入方式三:使用通配符*
from random import *
randint(1,10) # 产生一个随机整数(1-10)
random() # 产生一个随机数(0-1)
# 导入方式四:模块重命名
import random as mod
mod.randint(1,10) # 产生一个随机整数(1-10)
mod.random() # 产生一个随机数(0-1)
# 导入方式五:对变量重命名
from random import random as ra, randint
randint(1,10) # 产生一个随机整数(1-10)
ra() # 产生一个随机数(0-1)
阻止导入
# 在这个if中代码被别的模块导入的时候不会执行
if __name__ == '__main__':
pass
包
包就是包含__init__.py文件的文件夹
使用包中的内容(导入)
import 包名 - 直接导入包
import 包.模块 - 可以通过’包.模块.'去使用指定模块中的所有全局变量
from 包 import 模块1,模块2
from 包.模块 import 变量名1,变量名2
导入包的原理
通过包导入包中的模块的时候,程序会先执行包中__init__.py文件中所有的代码,热案后再执行对应模块中的代码
# 1. 直接导入包
import files
# 2. 通过包导入模块
import files.excel
files.excel.read_excel()
print(files.excel.x)
# 重命名
import files.excel as f_excel
f_excel.read_excel()
print(f_excel.x)
# 3. 通过包导入模块
from files import excel, plist
excel.read_excel()
plist.read_plist()
# 4. 通过包导入模块中的内容
from files.excel import read_excel
read_excel()
# 5. 直接使用包中的快捷
import files
files.read_excel()
from files import read_excel
read_excel()
import files
files.plist.read_plist()
异常处理
异常
程序在执行过程中报错,这个叫程序出现异常(错误 == 异常)
异常的出现会终止程序的运行
捕获异常
让程序在出现异常的时候不报错,并且可以继续执行
捕获异常的使用场景∶明明知道某个位置可能会出现异常,但是又无法(不愿意)通过修改代码来避免异常,还想在异常出现的时候程序可以继续执行,就可以对这段代码进行异常捕获。
异常处理
# 语法1
try:
代码段1(需要捕获异常的代码段)
except :
代码段2(捕获到所有异常(发生错误)时运行的代码)
# 语法2
try:
代码段1(需要捕获异常的代码段)
except 异常(错误)类型:
代码段2(捕获到异常(发生错误)时运行的代码)
# 语法3
try:
代码段1(需要捕获异常的代码段)
except (异常1,异常2,...):
代码段2(捕获到异常1,2...(发生错误)时运行的代码)
# 语法4
try:
代码段1(需要捕获异常的代码段)
except 异常类型1:
代码段2(捕获到异常1(发生错误)时运行的代码)
except 异常类型2:
代码段3(捕获到异常2(发生错误)时运行的代码)
...
# 语法5
try:
代码段1(需要捕获异常的代码段)
except 异常(错误)类型:
代码段2(捕获到异常(发生错误)时运行的代码)
finally:
代码段3(无论是否发生异常都会执行(就算异常没有被捕获到异常报错时也会执行))