python入门系列十(异常)

1.引言

python中异常是一种特殊对象,它是解释器在执行程序过程中,可能会出现一些错误或者意外。为了保障程序运行逻辑的健壮性,或者告知用户出错了,需要一种管理机制,对异常进行捕获处理。

2.异常

2.1.异常分类

在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例 。详细内容我建议你看官方文档:docs.python.org/zh-cn/3.11/...

下面我们基于分类,做一个小小的归纳:

2.1.1.基类异常(BaseException)

BaseException是所有异常的根类,它的直接子类有:

  • SystemExit:由sys.exit()调用引发,用于退出解释器
  • KeyboardInterrupt:中断键触发异常
  • GeneratorExit:生成器close方法调用触发异常
  • Exception:所有内置非系统退出异常基类

2.1.2.内置异常(继承自Exception)

内置异常,都基础自Exception类,非常多!这里列举几个常见的:

  • StopIteration:迭代器没有可再迭代元素时触发
  • ArithmeticError:算术类异常。比如除数为0,比如数值溢出等
  • EOFError:读取文件末尾异常
  • RuntimeError:一般运行时异常
  • SystemError:解释器内部错误

2.1.3.用户自定义异常

在实际业务项目开发中,我们会需要自定义一些业务类异常,同样继承自Exception就可以。比如:

python 复制代码
class CustomError(Exception):
    def __init__(self, message):
        super().__init__(message)

python中,异常的层次结构,你可以参考:docs.python.org/zh-cn/3.11/...

2.2.异常捕获

python在语法层面为异常捕获提供了支持,语法结构如下:

python 复制代码
try
	#可能发生异常代码块
except 异常:
   #捕获到异常后善后处理代码块
finally:
    #无论是否发生异常都会执行的代码

示例一:捕获特定异常

python 复制代码
try:
    with open("data.txt", "r") as f:
        content = f.read()
except FileNotFoundError:  # 精确匹配异常类型
    print("文件不存在!")

示例二:捕获多异常

python 复制代码
try:
    num = int(input("输入数字: "))
    result = 10 / num
except (ValueError, ZeroDivisionError) as e:  # 捕获多个异常
    print(f"错误类型:{type(e).__name__}, 详情:{e}")

示例三:捕获所有异常

python 复制代码
try:
    risky_operation()
except Exception as e:  # 捕获所有继承自 Exception 的异常
    print(f"意外错误: {e}")
    # 建议记录日志并重新抛出或处理

2.3.自定义异常

python自定义异常,需要继承Exception。像这样:

python 复制代码
# 自定义异常,继承Exception
class InvalidAgeError(Exception):
    """年龄无效异常"""
    def __init__(self, age):
        super().__init__(f"无效年龄:{age} (必须为 0-150)")

def set_age(age):
    if not 0 <= age <= 150:
        raise InvalidAgeError(age)
    print(f"年龄设置为:{age}")

try:
    set_age(200)
except InvalidAgeError as e:
    print(e)  # 输出:无效年龄:200 (必须为 0-150)
相关推荐
m0_48891301几秒前
Deep Research技术全解析:从Reasoning到Research with Reasoning的AI进化之路(值得收藏)
开发语言·人工智能·机器学习·大模型·ai大模型·大模型学习
雪兽软件2 分钟前
在企业中实施人工智能的关键步骤
人工智能
大写-凌祁3 分钟前
硬核劝学:2026年 AI 工程师“飞升”指南 (LLM/RL/VLM/AIGC 全路线)
人工智能·aigc
z***89715 分钟前
Flask框架中SQLAlchemy的使用方法
后端·python·flask
G果11 分钟前
ROS2 Cartographer纯定位导航遇到的问题
python·ros2·定位·cartographer·导航·launch·navigation2
leo_23212 分钟前
SMP(软件制作平台)接入AI实例--金陵书匣
人工智能·开发工具·smp软件制作平台
python零基础入门小白12 分钟前
2025年大模型面试通关秘籍!大厂高频LLMs真题全解析,一文掌握,助你轻松斩获心仪offer!
开发语言·人工智能·语言模型·架构·langchain·大模型教程·大模型面试
LinQingYanga21 分钟前
极客时间AI 算法进阶训练营 毕业总结(2025年11月30日)
人工智能
Brduino脑机接口技术答疑32 分钟前
脑机接口数据处理连载(二) 数据源头解析:脑电信号的采集原理与数据特性
人工智能·python·算法·数据分析·脑机接口
Coding茶水间33 分钟前
基于深度学习的火焰检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉