一、快速掌握Python中的异常(Exception)
异常是程序运行过程中出现的错误事件,会中断正常执行。try-except用来捕获并处理程序运行时的异常。try:放可能出错的代码except:异常发生时执行else:无异常时执行finally:总会执行异常未在当前函数处理时,会沿调用链向上传递,直到被捕获。raise用来手动触发异常。通过继承Exception或其子类,创建业务相关的异常类型。文件或数据库操作出错时可能导致资源未关闭。模块是一个
·
文章目录
1. 异常(Exception)
定义
异常是程序运行过程中出现的错误事件,会中断正常执行。
作用
- 防止程序崩溃,提高健壮性。
- 提供处理错误的机制。
通用语法格式
# 常见异常触发(无需特别语法)
<有可能出错的语句>
示例代码
# 除以 0 会触发 ZeroDivisionError 异常
print(10 / 0)
2. 异常捕获(try-except)
定义
try-except
用来捕获并处理程序运行时的异常。
作用
- 避免程序因错误直接终止。
- 可对不同错误类型做不同处理。
通用语法格式
try:
可能出错的语句
except 异常类型 as 变量:
处理异常的语句
示例代码
try:
num = int(input("请输入整数:")) # 可能抛 ValueError
print(10 / num) # 可能抛 ZeroDivisionError
except ValueError as e: # 捕获输入非整数
print("输入错误:必须输入整数!", e)
except ZeroDivisionError as e: # 捕获除零错误
print("数学错误:除数不能为 0!", e)
3. 异常完整结构(try/except/else/finally)
定义
异常处理的完整框架:
try
:放可能出错的代码except
:异常发生时执行else
:无异常时执行finally
:总会执行
作用
保证逻辑清晰,适合复杂业务。
通用语法格式
try:
可能出错的语句
except 异常类型:
处理异常的语句
else:
没有异常时执行的语句
finally:
不论是否有异常都执行的语句
示例代码
try:
f = open("data.txt", "r") # 可能文件不存在
content = f.read()
except FileNotFoundError: # 文件未找到异常
print("错误:文件不存在!")
else:
print("文件内容:", content) # 无异常才执行
finally:
f.close() # 一定执行,释放资源
4. 异常的传递性
定义
异常未在当前函数处理时,会沿调用链向上传递,直到被捕获。
作用
- 灵活选择在合适层级捕获异常。
- 避免过度处理导致错误难以发现。
通用语法格式
def 函数1():
可能抛出异常
def 函数2():
调用函数1
try:
函数2()
except 异常类型:
处理异常
示例代码
def func1():
return 10 / 0 # 抛出 ZeroDivisionError
def func2():
return func1() # 异常未捕获,继续传递
try:
func2()
except ZeroDivisionError:
print("外层捕获了除零异常")
5. 主动抛出异常(raise)
定义
raise
用来手动触发异常。
作用
- 用于数据校验、业务规则控制。
通用语法格式
raise 异常类型("错误信息")
示例代码
def set_age(age):
if age < 0:
raise ValueError("年龄不能为负数") # 主动抛出异常
return age
set_age(-5)
6. 自定义异常
定义
通过继承 Exception
或其子类,创建业务相关的异常类型。
作用
- 提升代码可读性和可维护性。
通用语法格式
class 自定义异常名(Exception):
pass
示例代码
class NegativeScoreError(ValueError):
"""自定义异常:分数不能为负"""
pass
def set_score(score):
if score < 0:
raise NegativeScoreError("分数不得为负")
7. 文件/资源管理中的异常
定义
文件或数据库操作出错时可能导致资源未关闭。
作用
- 通过
finally
或with
保证资源释放。
通用语法格式
with open(文件名, 模式) as f:
操作文件
示例代码
try:
with open("data.txt", "r", encoding="utf-8") as f:
print(f.read()) # 文件操作
except FileNotFoundError:
print("错误:文件不存在")
8. 模块(Module)
定义
模块是一个 Python 文件,内部包含函数、变量、类。
作用
- 代码复用
- 功能分层
通用语法格式
import 模块名
from 模块名 import 成员
示例代码
import math
print(math.sqrt(16)) # 4.0
print(math.pi) # 3.1415926...
9. 自定义模块
定义
开发者创建的 .py
文件可作为模块导入。
作用
- 封装功能代码。
通用语法格式
# mymodule.py
def 函数名():
...
# main.py
import mymodule
mymodule.函数名()
示例代码
mymodule.py
def greet(name):
print("Hello,", name)
main.py
import mymodule
mymodule.greet("Alice")
10. 包(Package)
定义
包是包含 __init__.py
文件的目录,用于组织多个模块。
作用
- 项目结构清晰
- 支持模块层次化管理
通用语法格式
from 包名 import 模块名
from 包名.子包 import 模块名
示例代码
目录:
mypkg/
__init__.py
calc.py
calc.py
def add(a, b):
return a + b
main.py
from mypkg.calc import add
print(add(2, 3))
11. 安装第三方包
定义
第三方包是 Python 社区开发的功能库。
作用
- 扩展功能(如网络、数据分析、机器学习)。
通用语法格式
pip install 包名
示例代码
import requests
r = requests.get("https://httpbin.org/get")
print(r.status_code)
12. 模块搜索路径
定义
Python 在导入模块时,会按 sys.path
中的路径顺序查找。
作用
- 控制自定义模块导入位置。
通用语法格式
import sys
print(sys.path)
示例代码
import sys
print("\n".join(sys.path)) # 打印所有模块搜索路径
13. 综合小项目:安全除法库
定义
结合模块与异常机制,构建安全的除法工具。
作用
- 演示模块化 + 异常处理结合应用。
通用语法格式
# core.py
class 异常类(Exception):
pass
def 函数名():
raise 异常类("错误信息")
示例代码
safe_math/core.py
class DivideByZero(Exception):
"""自定义异常:除数不能为 0"""
pass
def safe_div(a, b):
if b == 0:
raise DivideByZero("除数不能为 0")
return a / b
main.py
from safe_math.core import safe_div
try:
print(safe_div(10, 0))
except Exception as e:
print("错误:", e)
14. 总结
- 异常:处理错误,保证程序健壮。
- 模块:复用代码。
- 包:组织模块,结构清晰。
- 第三方库:扩展功能,提升开发效率。
更多推荐
所有评论(0)