模块 Module
定义:
含一系列数据、函数、类的文件,通常以.py结尾。
作用:
让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰。
有利于多人合作开发。
导入
导入方式1: 创建变量module01关联该模块
将该模块成员导入到当前作用域中
将该模块所有成员导入到当前作用域中
项目的目录
"""
模块
练习:
将student_info_manager.py分解为4个模块
-- bll.py --> 业务business 逻辑logic 层layer
存储Controller类
-- usl.py --> 用户user 显示show 层layer
存储View类
-- model.py --> 存储数据模型Model
-- main.py --> 存储入口代码
"""
# 建议设置项目根目录
# -- 在day14文件夹上,右键选择"Mark Directory as"
# -- 在选择"Sources Root"
# 导入方式1: 创建变量module01关联该模块
# 语法:
# import 模块
# 模块.成员
# 适合:面向过程的技术(全局变量、函数)
import module01
module01.func01()
# m01 = module01.MyClass()
# m01.func02()
# 导入方式2: 将该模块成员导入到当前作用域中
# 语法:from 文件名 import 内容
# 适合:面向对象的技术(类)
# from module01 import func01
from module01 import MyClass
# func01()
# m01 = MyClass()
# m01.func02()
# 导入方式3: 将该模块所有成员导入到当前作用域中
# 语法:from 文件名 import *
# 适合:面向对象的技术(类)
from module01 import *
func01()
m01 = MyClass()
m01.func02()
包package
定义:
将模块以文件夹的形式进行分组管理
作用:
让一些相关的模块组织在一起,使逻辑结构更加清晰。
语法:
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 成员名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
# # 方法1
# # import 路径.模块名
# import package01.package02.module01 as m
#
# m.func01()
#
# # 方法2
# from 路径.模块名 import 成员
from package01.package02.module01 import func01
func01()
# # 方法3
# # from 路径.模块名 import *
# from package01.package02.module01 import *
#
# func01()
"""
特殊导入方式
设置包的__init__.py文件
"""
# 方式1:import 包
# 设置:import package01.package02.module01
# import package01.package02 as p
#
# p.module01.func01()
# 方式2:from 包 import 包
# 设置:from package01.package02 import module01
# from package01 import package02
#
# package02.module01.func01()
# 方式3:from 包 import *
# 设置:__all__ = ["module01"]
from package01.package02 import *
module01.func01()
导入模块是否成功的唯一标准:
导入路径 + sys.path = 实际路径
import sys
sys.path.append("/home/tarena/month01/code/day15/my_projcet")
# print(sys.path)
from common import *
class SkillDeployer:
def func02(self):
print("func02执行了")
异常处理Error
异常
定义:运行时检测到的错误
现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
常见的异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 为实现异常(NotImplementedError):尚未实现的方法。
-- 异常基类Exception。
异常处理
核心价值:保证程序按照既定流程原则(就近原则)
语法:
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
"""
异常处理
目的:错误状态(向上翻) --> 正常状态(向下走)
核心价值:保障程序按照既定流程执行
"""
def div_apple(apple_count):
person_count = int(input("请输入人数:"))
result = apple_count / person_count
print("每人%d个苹果" % (result))
# 写法1:对症下药(官方建议)
"""
# 检测可能出错的代码
try:
div_apple(10)
# 定位错误代码
except ValueError:
print("不能输入非整数类型")
except ZeroDivisionError:
print("不能输入零")
print("后续逻辑")
"""
# 写法2:包治百病(常用)
"""
# 检测可能出错的代码
try:
div_apple(10)
# 定位全部错误代码
# except Exception:
except:
print("出错喽")
print("后续逻辑")
"""
# 写法3:一定执行的逻辑
"""
# 检测可能出错的代码
try:
div_