模块包和异常
1.模块
1.认识模块
- python中一个py文件就是一个模块
- 模块分为系统模块和自定义模块两种
- 系统模块: python自带的模块,例如:functools、math、random、re、time、datetime、turtle、smtplib、socket、threading等
- 自定义模块: 由程序员自己创建的模块
2.导入模块 - 怎么在一个模块中去使用另外一个模块中的内容
- 如果我们想要使用的内容(变量、函数、类)在另外一个模块中,可以用,但是使用之前必须先导入
- 一个模块中的内容想要能被其他模块使用的前提:模块名必须符合变量名的要求(是标识符,不是关键字)
3.怎么导
-
import 模块名 - 导入指定模块,导入后可以通过’模块名.'的方式使用这个模块中所有的全局变量
import demo1 print(demo1.a1) print(demo1.name1) demo1.func1() import random print(random.randint(10, 20)) 同时导入两个模块 import demo1, random
-
from 模块名 import 变量名1, 变量名2,… - 导入指定模块,导入后可以直接使用import后面的所有变量
from demo1 import a1, func1 print(a1) func1() from random import randint print(randint(10, 20))
-
from 模块名 import * - 导入指定模块,导入后可以直接使用模块中所有的全局变量
from demo1 import * print(a1) print(name1) func1()
-
重命名
-
import 模块名 as 新模块名 - 对模块名重新命名
import studentManagerSystem as SMS print(SMS.x) print(SMS.count) import demo1 as de demo1 = '测试' print(demo1) print(de.a1, de.name1)
-
from 模块名 import 变量名1, 变量名2 as 新变量名2,… - 对变量重命名
from demo1 import func1 as d_func1, name1, a1 func1 = 'abc' d_func1() print(func1) print(name1)
-
4.导入的原理与阻止导入(了解)
-
导入的原理
不管是通过import直接导入模块,还是通过from-import导入模块中的变量,原理都是进入指定模块,将模块中的代码全部执行一遍
-
阻止导入
在被导入的模块中添加指定的if语句(main提示出来的if语句),将不需要被别的模块执行的代码放到这个if语句中
if __name__ == '__main__': 需要被阻止导入的代码
2.包
1.什么包
包含__init__.py文件的文件夹就是包
2.导入包中的模块
-
导入方式1:import 包.模块 as 新名字
import package1.jsonfile as jsonfile jsonfile.read_json()
-
导入方式2:from 包 import 模块1, 模块2, …
from 包 import *
from package1 import jsonfile, csvfile jsonfile.read_json() print(jsonfile.x, jsonfile.name) csvfile.write_data_to_csv()
-
导入方式3:from 包.模块 import 变量1, 变量2,…
from package1.jsonfile import read_json, name read_json() print(name) from package1.data.exceldata import xx print(xx)
-
导入方式4:如果要使用包中__init__.py中内容,直接用包去导入和使用
from package1 import xx print(xx) import package1 package1.open_file() print(package1.xx, package1.yy)
3.异常捕获
1.异常
- 异常就是错误(程序报错 == 程序出现异常)
- 如果执行程序的过程中出现异常,程序会直接结束,不会再接着往后执行
2.异常捕获
异常捕获就是让程序在出现异常的时候,不报错,并且程序可以继续执行。
什么时候需要异常捕获:
- 明明知道某段代码可能会出现异常,但是出现异常原因不是代码写错误了,而是因为使用者操作不当导致的,又不想因此导致程序崩溃,就可以使用异常捕获
-
语法1 - 捕获所有类型的异常
try: 代码段1(需要捕获异常的代码段) except: 代码段2(捕获到异常后会执行的代码) 其他代码
执行过程:先执行代码段1,执行过程中如果出现异常不报错马上执行代码段2,然后再执 行后续的其他代码。如果没有代码段1没有出现异常,不执行代码段2,直接执行后续的其他代码。
-
语法2 - 捕获指定异常
try: 代码段1(需要捕获异常的代码段) except 异常类型: 代码段2(捕获到异常后会执行的代码)
-
语法3 - 同时捕获多种异常,针对不同异常做相同的处理
try: 代码段1(需要捕获异常的代码段) except (异常类型1, 异常类型2,...): 代码段2(捕获到异常后会执行的代码)
-
语法4 - 同时捕获多种异常,针对不同异常做不一样的处理
try: 代码段1(需要捕获异常的代码段) except 异常类型1: 代码段11 except 异常类型2: 代码段22 ...
try:
print('====')
print({'a': 10}['b'])
print('++++')
except:
print('出现了异常')
try:
age = int(input('请输入年龄(年龄是整数):'))
print(age + '12')
except:
print('年龄输入有误!')
try:
age = int(input('请输入年龄(年龄是整数):'))
print(age + '12')
except ValueError:
print('年龄输入有误!')
3.抛出异常 - 主动让程序崩溃
raise 异常类型
class AgeError(Exception):
def __str__(self):
return '年龄的范围是0~150'
age = int(input('请输入年龄(0~150):'))
if age < 0 or age > 150:
raise AgeError