一、异常
抛出异常 raise (自己在代码中自定义异常的情况)
步骤:
创建一个Exception(‘XXX’)对象,XXX-----异常提示信息
raise抛出这个对象(异常对象)
捕获异常:
基本格式:
try:
# 1. 可能触发异常的代码块(核心)
风险代码 # 如:除法、文件操作、网络请求等
except 异常类型1 [as 异常对象]:
# 2. 捕获指定类型异常后的处理逻辑
处理逻辑1 # 如:打印错误、记录日志、兜底操作
except 异常类型2 [as 异常对象]:
# 可捕获多个不同类型异常,按顺序匹配
处理逻辑2
else:
# 3. 可选:try块无异常时执行(非必须)
无异常逻辑 # 如:提示操作成功
finally:
# 4. 可选:无论是否异常,最终必执行(非必须)
收尾逻辑 # 如:关闭文件、释放资源
注意:
as 异常对象:可选,用于获取异常的详细信息(如错误描述、堆栈),常用变量名 e/err;
异常类型需继承自 BaseException(Python 所有异常的基类),常见如 ZeroDivisionError、FileNotFoundError、KeyError 等;
若省略异常类型(except:),会捕获所有异常(不推荐,易隐藏逻辑错误)。
案例:
需求: 密码长度不足,就报异常
分析:用户输入密码,判断密码长度是否大于等于6,小于6位就报异常,即抛出自定义异常,并捕获异常
注意:捕获异常是为了检测到异常时代码还能继续往下执行,即程序不会停止运行
代码:
def check_password(): pwd = input("请输入密码:") if len(pwd) >= 6: return "密码输入正常" raise Exception("密码长度不足,输入失败") try: # 捕获异常 print("密码输入结果:",check_password()) # 调用函数 except Exception as e: print("密码输入异常:",e)
二、模块
含义:
模块是python文件中的代码,就是一个py文件,模块名就是文件名,去掉.py后缀,里面定义了函数、类、变量等,需要的时候可以导入使用
分类:
内置模块:random、time、os、logging
第三方模块(第三方库):下载 ---- windows+r进入cmd窗口输入:pip install 模块名
自定义模块:自己在项目中定义的模块。注意:命名要遵循标识符规定以及变量的命名规范,不要与内置模块起冲突,否则导致模块功能无法使用
导入模块方式:
import 模块名 :
语法:import 模块1(,模块2,模块3……)
注意:可以导入多个模块,但是最好一个模块单独使用一个import
调用功能:模块名.功能名 & 模块名.变量
from … import… :
语法:from 模块名 import 功能1,功能2…
调用功能:直接输入功能即可,不需要添加模块名
注意:import后面填写需要导入的功能,没有导入,报错;导入函数,只需要函数名,不需要加上()
from ... import * :
语法: from 模块名 import *
含义:把模块中的所有内容全部导入
注意:不建议过多使用from...import...声明,有时候命名冲突会造成一些错误
as 起别名
as 给模块起别名
语法:import 模块名 as 别名 ----import pytest as pt
调用:pt.func() & pt.name
as 给功能起别名
语法: from 模块名 import 功能 as 别名
调用:from pytest import func as f , name, funb as b
注意:导入多个功能,使用“,” 逗号将功能与功能隔开,后面的功能也可以取别名:功能名 as 别名
内置全局变量
1.语法:
if __name__ == "__main__":作用:用来控制py文件在不同的应用场景执行不通的逻辑
__ name __:
文件在当前程序执行(即自己执行自己):__ name __ == "__ main __"
下面的代码会被执行
文件被当作模块被其他文件导入:__ name __ == 模块名
下面的代码不会被显示出来
总结:
运行方式
__name__的值if内代码是否执行直接运行脚本
"__main__"是
导入为模块使用
模块名
否
三、包
含义:就是项目结构中的文件夹/目录
与普通文件夹的区别:
包是含有__ init __.py的文件夹
作用:将有联系的模块放到同一个文件夹下,有效避免模块名称冲突问题,让结构更清晰
新建包:pycharm 中右键项目名--> New-->Python Package,创建后文件夹下自动带有__ init __.py的文件
注意:
import 导入包时,首先执行__ init __.py文件的代码;
不建议在此文件写大量代码,尽量保证init的内容简单;
__ init __.py文件主要作用:导入这个包内的其他模块
__ all __ : 本质上是一个列表,列表里面的元素就代表要导入的模块
作用:
可以控制要导入的东西
当使用 from 模块名 import * 时,哪些名称会被导入
仅作用于 from 模块名 import * 语句,对其他导入方式无任何影响
定义形式:__ all __= [字符串1, 字符串2, ...],列表中的字符串必须是模块内已定义的名称(函数、类、变量等)
使用方式:
先在__ init __.py文件中使用 __ all __= ["register", "login"],列表中代表要引入的模块
然后再在要导入的py文件里面导入from pack import *
注意:* 代表所有,但是使用列表后,只导入列表中的模块了
包的本质依然是模块,包又可以包含包
补充总结:
特性
__all____name__核心作用
控制
import *导入的名称范围区分脚本 “直接运行”/“被导入为模块”
作用对象
模块的对外接口
脚本的运行方式
数据类型
列表(字符串元素)
字符串
影响范围
仅
from 模块 import *整个脚本 / 模块