一、异常机制

1. 什么是异常?

异常就是程序运行过程中遇到的错误情况。比如:除数为0、文件不存在、内存不足等。Python通过异常类来描述和处理这些异常。

处理过程

  • 抛出异常:发生异常时,生成一个异常对象,停止当前执行路径
  • 捕获异常:解释器寻找相应的代码来处理该异常
# 最常见的异常:除数不能为0
a = 3 / 0  # ZeroDivisionError
2. try…except 结构(最基础)
try:
    被监控的可能引发异常的语句块
except BaseException [as e]:
    异常处理语句块

执行顺序

  • try块中没有异常 → 跳过except,继续执行后续代码
  • try块中发生异常 → 跳过try块中后续代码,跳到except块处理异常,然后继续执行后续代码
try:
    print("step1")
    a = 3 / 0
    print("step2")  # 这行不会执行
except BaseException as e:
    print("step3")
    print(e)

print("step4")
# 输出:step1 → step3 → 异常信息 → step4
3. try…多个except结构

先子类后父类的顺序捕获多个异常,最后可以用BaseException兜底。

try:
    被监控的语句块
except Exception1:
    处理Exception1
except Exception2:
    处理Exception2
except BaseException:
    处理可能遗漏的异常
try:
    a = input('请输入被除数:')
    b = input('请输入除数:')
    c = float(a) / float(b)
    print("结果是:", c)
except ZeroDivisionError:
    print("除数不能为0")
except BaseException as e:
    print("出错了,错误是", e)
4. try…except…else 结构
  • try块无异常 → 执行else块
  • try块有异常 → 执行except块,不执行else块
try:
    a = input('请输入被除数:')
    b = input('请输入除数:')
    c = float(a) / float(b)
except BaseException as e:
    print("出错了,错误是", e)
else:
    print("结果是:", c)  # 无异常时才执行
5. try…except…finally 结构

finally块无论是否发生异常都会执行,通常用来释放资源。

try:
    a = input('请输入被除数:')
    b = input('请输入除数:')
    c = float(a) / float(b)
except BaseException as e:
    print("出错了,错误是", e)
else:
    print("结果是:", c)
finally:
    print("我是finally,无论发生异常,都执行")
6. 自定义异常类

自定义异常通常继承Exception类,命名以Error为后缀,由raise语句主动抛出。

# 自定义异常类
class AgeError(Exception):  # 继承Exception
    def __init__(self, errorInfo):
        Exception.__init__(self)
        self.errorInfo = errorInfo

    def __str__(self):
        return str(self.errorInfo) + ",年龄错误"

if __name__ == "__main__":
    age = int(input("请输入一个年龄:"))
    if age < 1 or age > 150:
        raise AgeError(age)
    else:
        print("正常年龄")

二、异常处理核心总结

结构 执行逻辑 使用场景
try...except 有异常执行except 最基本的异常捕获
try...多个except 匹配到哪个异常执行哪个 针对不同异常做不同处理
try...except...else 无异常才执行else 需要区分“正常结果”和“异常处理”
try...except...finally finally一定执行 需要释放资源(如关闭文件)
raise 主动抛出异常 业务逻辑校验不通过时

三、模块

1. 什么是模块?

模块就是一个包含Python代码的.py文件,可以包含函数、类、变量以及可执行代码。模块化编程能提高代码的可维护性和重用性。

使用模块的原因

  • 提高代码可维护性
  • 避免命名冲突
  • 增加代码复用率
  • 逻辑组织更清晰
2. 导入模块的方式
导入方式 语法 使用方式
导入整个模块 import 模块名 模块名.功能名()
导入多个模块 import 模块1, 模块2 同上
导入指定功能 from 模块 import 函数/类/变量 直接使用功能名
导入所有功能 from 模块 import * 直接使用功能名
给模块起别名 import 模块 as 别名 别名.功能名()
给功能起别名 from 模块 import 功能 as 别名 直接使用别名

代码演示

# 方式1:导入整个模块
import math
print(math.sqrt(25))  # 5.0

# 方式2:导入指定功能
from math import sqrt, pi
print(sqrt(25))  # 5.0
print(pi)        # 3.14159...

# 方式3:导入所有功能
from math import *
print(sqrt(25))

# 方式4:给模块起别名
import math as m
print(m.sqrt(25))

# 方式5:给功能起别名
from math import sqrt as my_sqrt, pi as pai
print(my_sqrt(25))
print(pai)
3. 自定义模块

自定义模块就是自己写的.py文件,供其他程序导入使用。

两个关键变量

变量 作用
__name__ 判断模块是被执行还是被导入 直接执行时为'__main__',被导入时为模块名
__all__ 控制from 模块 import *时哪些功能被导入 一个字符串列表
# moduleA.py
__all__ = ['add']  # 只允许导出add函数

def add(num):
    return num + 1

def add2(num):
    return num + 10

if __name__ == '__main__':
    print("这个模块被直接执行了")

# main.py
from moduleA import *
print(add(1))   # 可以调用
# print(add2(1))  # 报错!add2没有被导出

注意import 模块方式导入不受__all__影响,可以调用模块中的所有功能。

4. 包(Package)

包就是一个包含多个模块的文件夹,必须包含一个__init__.py文件。

导入方式

方式 语法 使用
导入包的模块 import 包名.模块 包名.模块.功能()
从包导入模块 from 包名 import 模块 模块.功能()
从包的模块导入功能 from 包名.模块 import 功能 直接调用功能
# 目录结构:
# my_package/
#   __init__.py
#   moduleA.py
#   moduleB.py

# 方式1
import my_package.moduleA
print(my_package.moduleA.add(1))

# 方式2
from my_package import moduleA
print(moduleA.add(1))

# 方式3
from my_package.moduleA import add
print(add(1))

__init__.py中的__all__:控制from 包 import *时哪些模块被导入。

# my_package/__init__.py
__all__ = ['moduleB']

# main.py
from my_package import *
moduleB.add(1)       # 可以调用
# moduleA.add(1)     # 报错,moduleA没有被导出

多层级的包:通过.来确认层级关系。

# my_package/inner_package/moduleC.py
import my_package.inner_package.moduleC
my_package.inner_package.moduleC.hi()

# 或者
from my_package.inner_package import moduleC
moduleC.hi()
5. pip 模块下载

pip是Python的包管理工具,用于安装、卸载和管理第三方包。

指令 作用
pip --version 查看pip版本
pip list 查看已安装的包
pip install 包名 安装单个包
pip install 包1 包2 安装多个包
pip uninstall 包名 卸载包
pip install -r requirements.txt 通过配置文件批量安装
pip install 包名 -i 镜像网址 使用国内镜像加速安装

常用镜像网址

  • 清华:https://pypi.tuna.tsinghua.edu.cn/simple/
  • 阿里云:https://mirrors.aliyun.com/pypi/simple/

示例

pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple/

今日核心总结

  1. 异常处理

    • 核心结构:try...except...else...finally
    • except捕获异常,else无异常时执行,finally一定执行
    • 自定义异常继承Exception类,用raise主动抛出
    • 捕获多个异常时按子类优先、父类兜底的顺序
  2. 模块

    • 模块就是.py文件,包就是包含__init__.py的文件夹
    • 导入方式:import 模块from 模块 import 功能import 模块 as 别名
    • __name__判断模块是被执行还是被导入
    • __all__控制from 模块 import *导出的内容
    • pip是Python的包管理工具,用国内镜像加速下载
  3. 组织结构层次
    函数 → 类 → 模块(.py文件) → 包(文件夹) → 项目

注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。

目前已经开始用已经学习的知识开始制作图书馆里系统啦,今天因为家里有事情耽误啦,只学习两节,不然python基础今天学完啦嘿嘿

更多推荐