一、模块
1. 什么是模块
什么是模块: python中一个py文件就是一个模块
2. 如何在一个模块中去使用另一个模块中的内容
- 使用前提:
- 需要被别的模块使用的模块的模块名必须符合变量名的要求
- 导入模块 - 模块里面的内容必须先要导入再使用
3.怎么导入模块
-
import 模块名
导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中的全局变量
-
form 模块名 import 变量1,变量2,变量3…
导入指定模块,导入后可以直接使用指定的变量
-
**from 模块名 import ***
导入指定模块,导入后可以直接使用模块中所有的全局变量
-
import 模块名 as 新模块名
对模块重命名
-
from 模块名 import 变量1 as 新变量1, 变量2 as 新变量2,变量3…
对模块中变量重命名
导入方式1
# import test1
#
# print(test1.a)
# test1.func1()
导入方式2
# from test1 import a,func1
# print(a)
# func1()
# print(name) # 报错
导入方式3
# from test1 import *
# print(a)
# print(name)
# func1()
导入方式4
# from test1 import t1
# print(a)
# print(name)
# func1()
导入方式5
from test1 import name as names,a
print(a)
print(names)
二、导入模块的原理
1.导入原理
- 不管是import还是from-import导入模块的时候,系统都会自动进入指定的模块,将模块中的所有的代码都执行一遍
新建test1
文档 :
print('=========star1============')
a = 100
name = '小明'
def func1():
print('test1中的函数')
print('=========end1============')
- 运行导入的模块,看模块中需要打印的东西是否从头到尾都打印出来
import test1
- 也会将指定模块中的代码全部执行一遍
from test1 import a
2. 阻止导入
目的: 导入模块的时候,不让模块中的所有代码都执行,只执行需要执行的部分
组织方法: 在被导入的模块中添加main对应的if语句,把不希望被别的模块执行的代码放到if语句里面
from test2 import download
download('肖生克的救赎')
注意:同一个模块如果导入多次,模块中的代码只会执行一次(自动查重)
import test1
import test1
if __name__ == '__main__': # 直接输main就欧克
pass
三、包
新建test2
文档:
def download(name):
print(f'连接{name}电影对应的服务器')
print("服务器传输数据")
print('客户端接收数据')
print(f'保存{name}数据')
print('======================')
# 这个if语句里面的代码在被别的模块导入的时候不执行
if __name__ == '__main__':
for i in range(100):
print(download(i))
1.什么是包
python中将包好了__int__
.py文件的文件夹叫做包,他是专门来管理模块的。
2.怎么使用包中的模块中的内容
-
import 包名
直接导入包,导入后可以用’包名.xxx’去使用包中__int__.py文件中所有的全局变量
-
import 包名.模块名
导入包中指定的模块,导入后可以用’包名.模块名.xxx’去使用指定模块中的所有的全局变量
-
from 包名 import 模块名1,模块名2…
-
from 包名.模块名 import 变量1,变量2…
导入方式1
# import file2
# print(file2.a)
# print(file2.B)
导入方式2
# import file2.test3
# print(file2.test3.name)
# print(file2.test3.age)
# import file2.test3 as test3
# print(test3.name)
# print(test3.age)
# print(test3.list1)
导入方式3
# from file2 import test3
# print(test3.name)
# print(test3.age)
导入方式4
from file2.test3 import name,list1
print(name)
# print(age) # 报错
print(list1)
四、异常捕获
1.异常
异常就是程序执行过程中报的错就是异常
如果程序执行过程中出现了异常。程序会崩溃,不会执行后面的代码
示例: 下边只会打印=、+的两句代码
print('=======')
print('+++++++')
print('abc'[5])
print('-------')
2.异常捕获
异常捕获是让程序在出现异常的时候不崩溃,还能接着往后执行
-
异常捕获的场景
程序员知道某个地方可能出现异常(出现异常的原因不是代码本身的问题,而是使用者操作不当等原因),但又希望在出现异常的时候程序不崩溃,还可以接着往后执行,这个时候才能进行异常捕获。
-
异常捕获的语法结构:
-
捕获任何类型异常
try: 代码段1(需要捕获异常的代码) except: 代码段2(捕获异常后会执行的代码)
执行过程: 先执行代码段1,如果代码段1出现异常,不会报错,而是会马上执行代码段2;如果代码段1没有出现异常,那代码段2不执行
示例
try: age = int(input('请输入年龄:')) if age < 18: print('未成年') else: print('成年') except: print('输入年龄有误') print('******')
-
捕获特定类型异常
try: 代码段1(需要捕获异常的代码) except 异常类型: 代码段2(捕获异常后会执行的代码)
示例
try: age = int(input('请输入年龄: ')) if age >= 18: print('成年') else: print('未成年') print(str(age)+'岁') except ValueError: print('年龄输入有误!')
-
可以同时捕获多种异常,增对不同异常,做相同处理
try: 代码段1(需要捕获异常的代码) except 异常类型(异常类型1,异常类型2...): 代码段2(捕获异常后会执行的代码)
-
可以同时捕获多种异常,增对不同异常,不相同处理
try: 代码段1 except 异常类型1: 代码段11(捕获异常后会执行的代码) except 异常类型2: 代码段22(捕获异常后会执行的代码) except 异常类型1: 代码段33(捕获异常后会执行的代码) ....
-
3. 异常捕获完整结构
语法:
try:
代码段1 (需要捕获异常的代码)
except:
代码段2 (捕获到异常后会执行的代码)
else:
代码段3 (没有出现异常会执行的代码)
finally:
代码段4 (无论有没有出现异常也不管异常有没有捕获到,都会执行 - 无论什么情况都会执行)
示例
try:
print('abc'[4])
except IndexError:
print('出现异常')
else:
print('没出现异常')
finally:
print('都会执行')
五、抛出异常
**作用: **主动让程序报错、崩溃
语法: raise 异常类型
- 自定义异常类型:
class AgeError(Exception):
def __str__(self):
return '年龄有误,正确的年龄范围是0~150岁'
age = int(input('请输入正确年龄(1~150):'))
if age < 0 or age >150:
raise AgeError