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