【第五章】Python 异常处理全解析:从基础到进阶

【Python复习手册一】:从入门到精通21章核心知识点全解析 本文系统整理了Python背记手册共21章的核心知识点,涵盖Python基础语法、运算符、流程控制、列表与元组、字典与集合、字符串、正则表达式、函数、面向对象、模块、异常处理、文件操作、数据库、GUI编程、Pygame游戏开发、网络爬虫、进程与线程、网络编程、Web基础、Flask框架等。每个知识点均配有详细解释和代码示例,适合初学者系统学习和开发者快速查阅。 阅读详情

Python 异常处理全解析:从基础到进阶



前言

在 Python 编程中,异常处理是保证程序健壮性的核心机制。当程序运行时遇到错误(如除数为零、文件不存在等),如果没有适当的处理机制,程序会直接崩溃并终止执行。异常处理机制允许开发者捕获这些错误,进行针对性处理后让程序继续运行,或在友好提示后优雅退出。本文将系统讲解 Python 异常处理的所有核心知识点,包含丰富实例帮助理解。


一、异常的基本概念​

异常是程序执行过程中发生的非预期事件,它会打断程序的正常流程。例如当尝试将字符串转换为整数时输入了字母,就会触发ValueError:

int("abc")  # 执行后会抛出ValueError: invalid literal for int() with base 10: 'abc'

Python 中所有异常都继承自BaseException类,常见的内置异常类形成了完整的继承体系。理解异常的层级关系,能帮助我们更精准地捕获特定类型的错误。

1.1 异常处理的核心语句​

  • try-except:捕获并处理异常​

try-except是最基础的异常处理结构,其语法如下:

try:
    # 可能发生异常的代码块
    risky_operation()
except ExceptionType1:
    # 处理ExceptionType1类型异常的代码
    handle_exception1()
except ExceptionType2 as e:
    # 捕获异常对象并处理
    handle_exception2(e)

实例 1:处理不同类型的异常​

try:
    num = int(input("请输入数字:"))
    result = 10 / num
    print(f"计算结果:{result}")
except ValueError:
    print("输入错误:请输入有效的整数")
except ZeroDivisionError as e:
    print(f"计算错误:{e}(除数不能为零)")

当用户输入非数字时触发ValueError,输入 0 时触发ZeroDivisionError,程序会根据异常类型进入对应的处理分支。

  • else 子句:无异常时执行的代码​

else子句与try-except配合使用,当try块中没有发生任何异常时,会执行else中的代码:​

try:
    file = open("data.txt", "r")
except FileNotFoundError:
    print("文件不存在")
else:
    print("文件内容:", file.read())
    file.close()

这种结构能清晰区分 “可能出错的代码” 和 “正常执行的代码”,提高可读性。​

  • finally 子句:必执行的清理操作​

finally子句用于定义无论是否发生异常都必须执行的代码,通常用于资源清理(如关闭文件、释放网络连接等):

file = None
try:
    file = open("data.txt", "r")
    print(file.read())
except FileNotFoundError:
    print("文件未找到")
finally:
    if file is not None:
        file.close()
        print("文件已关闭")

即使try块中发生异常,finally中的代码也会执行,确保资源被正确释放。在 Python 3 中,可使用with语句更简洁地管理资源,但finally在复杂场景中仍不可替代。

1.2 异常的主动触发​

除了系统自动抛出异常,开发者也可使用raise语句主动触发异常,用于验证输入合法性或标记业务逻辑错误:

def withdraw(amount):
    if amount < 0:
        # 主动触发ValueError
        raise ValueError("取款金额不能为负数")
    print(f"成功取款:{amount}元")

try:
    withdraw(-100)
except ValueError as e:
    print(f"操作失败:{e}")

raise还可不带参数使用,用于在except块中重新抛出捕获的异常,便于上层代码处理:

try:
    int("abc")
except ValueError:
    print("捕获到转换错误,将重新抛出")
    raise  # 重新抛出异常

二、自定义异常类​

当内置异常无法满足业务需求时,可通过继承Exception类创建自定义异常,使异常信息更具针对性:

# 定义自定义异常
class InsufficientFundsError(Exception):
    """余额不足时触发的异常"""
    def __init__(self, balance, required):
        self.balance = balance
        self.required = required
        super().__init__(f"余额不足:当前余额{balance},需要{required}")

# 使用自定义异常
def purchase(price, balance):
    if price > balance:
        raise InsufficientFundsError(balance, price)
    print(f"购买成功,剩余余额:{balance - price}")

try:
    purchase(500, 300)
except InsufficientFundsError as e:
    print(f"购买失败:{e}")

自定义异常通常用于表示特定业务场景的错误,使异常处理逻辑更清晰。按规范,自定义异常类名应以Error结尾,且应提供有意义的错误信息。


三、异常处理的高级技巧​

3.1 捕获多个异常​

可在一个except块中同时捕获多种异常类型,用元组包裹异常类:​

try:
    # 可能触发多种异常的操作
    data = [1, 2, 3]
    print(data[10])
    result = 10 / 0
except (IndexError, ZeroDivisionError) as e:
    print(f"发生错误:{e}")

但需注意,这种方式可能掩盖不同异常的处理差异,建议仅在多种异常需要相同处理逻辑时使用。​

3.2 异常的层级捕获​

由于异常存在继承关系,捕获父类异常会同时捕获所有子类异常。例如Exception是所有非系统退出异常的父类,捕获Exception会捕获几乎所有常见异常:

try:
    risky_operation()
except Exception as e:  # 不推荐的做法
    print(f"发生未知错误:{e}")

这种 “万能捕获” 可能隐藏潜在 bug,应尽量捕获具体的异常类型。正确的做法是先捕获子类异常,再捕获父类异常:

try:
    int("abc")
except ValueError:
    print("值错误")
except Exception:
    print("其他异常")

3.3 异常处理的最佳实践​

  • 捕获具体异常而非通用异常:避免使用except Exception:捕获所有异常,应针对特定错误类型编写处理逻辑。​
  • 提供有意义的错误信息:异常信息应清晰说明错误原因,便于排查问题,如f"无法读取文件{filename}:{e}"。​
  • 及时清理资源:使用finally或with语句确保文件、网络连接等资源被正确释放。​
  • 避免过度使用异常:不应将异常用于常规控制流程,如try: return data[0] except IndexError: return None可改为if data: return data[0] else: return None。​
  • 适当记录异常日志:对于关键业务逻辑,应使用logging模块记录异常详情,而非仅打印到控制台。

总结

Python 异常处理机制通过try-except-else-finally结构、raise语句和自定义异常类,为开发者提供了灵活而强大的错误处理工具。掌握异常处理的核心知识点,不仅能使程序更健壮,还能提高代码的可读性和可维护性。在实际开发中,应根据业务场景选择合适的异常处理策略,平衡 “精确捕获” 和 “全面防护”,编写既可靠又易于调试的代码。

Python爬虫实战:股票基础信息抓取——从入门到精通的完整指南 通过本文的详细介绍,我们构建了一个完整的股票信息抓取系统,涵盖了从数据获取、解析、存储到调度、监控的全流程。然而,这仅仅是金融数据应用的起点。在实际投资决策中,基础价格数据需要与更多维度的信息结合:基本面数据(市盈率、市净率、ROE等)、技术指标(MACD、KDJ、布林带等)、市场情绪指标、宏观经济数据等,才能形成更全面的分析框架。 阅读详情

相关推荐

Python全栈知识手册:从零基础到并发编程与MySQL实战

Python入门常面临知识碎片化、环境配置复杂等挑战。其核心原理在于解释器与包管理机制、内存回收策略及并发模型。掌握这些基础能显著提升开发效率与代码质量,适用于Web后端、数据处理及自动化脚本等场景。本文以一份200多页的HTML知识手册为例,系统梳理从变量常量到并发编程、MySQL操作的完整学习路径,并融入垃圾回收、深浅copy、粘包问题等高频热词,帮助读者构建可检索、可复用的知识体系。

weixin_28689507的博客 244

Python中的异常处理

Python中的异常处理

qq_44954371的博客 4666

基于ENVI5.6与SARscape的哨兵一号时序InSAR实战:从数据准备到PS/SBAS结果解译

本文详细介绍了基于ENVI5.6与SARscape软件,利用哨兵一号(Sentinel-1)卫星数据,进行PS-InSAR与SBAS-InSAR时序分析,以监测地表形变的完整实战流程。内容涵盖从数据下载、软件配置、预处理、核心处理步骤到结果解译与质量评估,重点解析了PS与SBAS方法的关键参数设置、常见问题及解决方案,旨在帮助用户掌握从数据准备到成果分析的完整技术链条。

oo7890的博客 634

Python 中的异常处理

程序读文件内容的过程可能会发生错误,例如:要读取的文件不存在。传统的错误处理方式如下:某个函数 f 在运行过程中可能会发生错误;函数 f 发生错误时,函数 f 返回错误代码;在调用函数 f 的地方,需要检查 f 的返回值是否有错。1. 传统的错误处理方式1.1 返回错误码例如,在 C 语言中,函数 open 用于打开一个文...

weixin_26808963的博客 287

超越图灵机——论人工智能实现的可能性(一)

超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思

太极语言 1万+

遥感图像小白--2--图像分割

遥感图像分割基础入门

Mary的博客 4237

Python——异常处理

讲述了Python异常处理机制、内置异常类的结构、异常处理的语法结构、异常的检测与处理方法、自定义异常类的定义与使用方法、with语句与断言的使用方法。

m0_65639340的博客 1万+

树莓派CSI/DSI二合一接口深度玩法:同时驱动MIPI摄像头和屏幕的配置秘籍

本文详细解析了树莓派5上CSI/DSI二合一接口的深度玩法,提供了同时驱动MIPI摄像头和屏幕的完整配置秘籍。从硬件连接到软件设置,包括config.txt的优化配置,帮助用户充分利用树莓派5的双多功能接口,实现高效的双设备工作模式。

weixin_30687051的博客 573

【python】异常处理

Python中,程序执行过程中发生的错误或异常情况。当出现异常时,程序会停止执行并抛出一个异常对象,如果没有适当的处理机制,程序将会终止运行。为了避免直接停止程序,提高程序的容错性和可靠性,我们通常会使用try语句来处理异常。

啊?这个人,居然也写代码啊…… 5015

PICO4 VR开发调试神器:用Live Preview Plugin实现电脑串流,告别反复打包烧录的繁琐流程

本文详细介绍了PICO4 VR开发中如何使用Live Preview Plugin实现电脑串流,显著提升开发效率。通过实时预览和调试功能,开发者可以避免反复打包烧录的繁琐流程,特别适用于Unity环境下的VR应用开发。文章涵盖环境配置、连接设置、实时调试技巧及性能优化方案,是PICO4开发者的必备指南。

weixin_34110970的博客 419

golang任意代码免杀绕过火绒+电脑管家

火绒和电脑管家主要以静态规则为主,但是有时候静态杀起来也挺让人奔溃的,这边分享一下如何拿捏火绒和电脑管家本文主要介绍如何通过garble进行混淆编译来绕过火绒,garble也可以绕过其他杀软,但是对火绒和电脑管家特别有效果,以火绒为例 下面来对比一下golang原生和garble混淆编译后得差距来一个很原始的的shellcode loader代码,将原始shellcode base64后就进行加载执行。

2301_79571829的博客 1533

想要python不报错,进来看看-->python常见错误和异常处理

错误和异常 概念 两种容易辨认的错误 ​ 语法错误:一些关于语法的错误【缩进】 ​ 异常:代码完全正确,但是,程序运行之后,会报出 的错误 exception/error 代码演示: list1 = [23,54,6,6] print(list1[2]) print(list1[3]) print(list1[4]) print("over") """ 6 6 Traceback (most recent call last): File "C:/Users/Administrator/Des

晨晨渝奇的博客 1409

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2475

把第五章作业做成小项目:Python文件操作与异常处理实战

文件读写与异常处理是所有数据处理类程序的基石,无论是命令行工具还是Web应用,都离不开安全的数据持久化和健壮的输入校验。在实际开发中,用户可能输入非法数据、文件可能不存在或损坏,如何优雅降级并保持运行稳定,是衡量代码质量的重要标尺。本文从一次常见的Python课程作业——实现一个记账系统——入手,完整演示了从需求拆解、数据模型设计、函数拆分、边界测试到文档提交的全过程,并着重讲解了JSON存储、日期金额校验、备份恢复等实用技巧。无论你是刚学完基础语法还是第一次接触完整命令行项目,都可以把这份指南当作标准化作

weixin_29895109的博客 214

OpenCode + Oh My OpenCode:打造你的终极AI编程团队(OpenCode新手入门指南)

本文详细介绍了开源终端AI编程助手 OpenCode 的完整配置教程 🖥️,从安装、AI模型配置到增强插件 Oh My OpenCode 的部署一应俱全。支持 Claude、ChatGPT、Gemini 多模型切换 🤖,还能实现多AI智能体协作开发。步骤清晰适合新手 📝,想在终端用AI写代码的开发者不要错过 ✨

XiaoqiangClub的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python第五章核心知识:函数、模块与文件操作详解

函数是Python编程的核心构建块,通过定义可复用的代码单元实现结构化编程。其工作原理涉及参数传递、作用域规则和返回值处理等机制,能显著提升代码可维护性。模块化编程则通过文件拆分和导入系统管理复杂度,结合文件IO操作可构建完整的数据处理流程。这些基础概念广泛应用于Web开发、数据分析和自动化脚本等领域。本文以py05教学章节为例,详解函数定义、模块导入和JSON文件处理等工程实践,并演示如何构建命令行计算器项目。特别对lambda表达式和with语句等Python特色语法进行了重点剖析。

720

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python期末救命指南:异常处理全解析,从基础语法到实战避坑(万字长文)

在 Python 中,异常(Exception)是程序运行时发生的错误事件。当解释器检测到无法继续正常执行当前指令时,它会停止当前代码块的执行,并创建一个异常对象,然后沿着调用栈向上传播,直到找到匹配的except处理器,或者一直传播到顶层导致程序终止。考点:有时会要求定义一个自定义异常类。super().__init__(f"年龄。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 324

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python第五章核心知识点与实战技巧详解

函数编程和面向对象是Python进阶的核心技术,理解函数参数传递、作用域规则以及类与对象的概念是掌握Python的关键。在实际开发中,文件操作和异常处理机制能显著提升代码的健壮性,而模块化开发则让项目更易维护。Python第五章通常涵盖这些核心内容,帮助开发者从基础语法过渡到项目实战。通过系统学习函数定义、文件读写、异常处理以及面向对象编程,开发者能够构建更复杂的应用程序,如数据分析工具或Web服务后端。掌握这些知识点不仅能解决常见编程问题,还能为学习Web开发、人工智能等高级应用打下坚实基础。

weixin_30756499的博客 276

《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》学习笔记总目录

本文是对《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》所有知识点的笔记进行总结分类。 学习时总结的目录笔记以及思维导图和实训,将在后续更新。

放下华子我只抽RuiKe5的博客 8837

Hello python --python基础知识大全 考级考研项目实战通用

python基础知识

2601_94974376的博客 525

零基础学python-目录

第一章 初识python 1.1 安装python 1.2 什么是idle 1.3 通过idle启动python 1.4 hello world

raylee2007的专栏 1万+

python爬虫期末复习笔记,基础传智播客书 《解析Python网络爬虫》

使用场景区分:通用爬虫和聚焦爬虫 通用爬虫:将互联网上的网页下载到本地。 聚焦爬虫:按照特定目的进行工作的爬虫 爬取形式进行区分:累积式爬虫和增量式爬虫 累积式爬虫:通过遍历的方式爬取所有允许的内容 增量式爬虫:在爬取了大量网页前提的基础下爬取网页更新的内容 按照爬取数据的存在方式进行区分:表层爬虫 和深层爬虫 表层爬虫:爬取网页表层的内容 深层爬虫:不能通过静态网页显示的内容 (建议记住名字) ...

weixin_44877502的博客 2635

《Python基础:从零写出好代码》专栏开篇词

学编程到底要学什么?我认为不是背语法,而是能用语言清晰表达你的意图,写出别人能维护、能复用、能信任的代码。这个专栏,就是为此而写。下一篇,我们就从第一个 Python 程序开始:不只是打印 Hello World,而是真正理解它背后的运行逻辑、编码细节与“从脚本走向程序”的转折点。👇👇👇。

Anthony1453的博客 763

【实战向】Python爬虫入门到上手:零基础也能爬取网页数据,附可直接运行代码

本文介绍了Python爬虫入门的基础知识和实战操作。首先澄清了爬虫并非黑客行为,而是模拟浏览器访问网页并提取公开信息的自动化程序。文章详细讲解了爬虫必备的三个核心工具:Python环境、requests库和BeautifulSoup库,并强调合法合规使用爬虫的重要性。 在基础铺垫部分,重点介绍了HTML基本结构和爬虫四步核心流程:发送请求、解析内容、提取数据和保存数据。最后通过实战案例,手把手演示如何爬取优快云博客文章列表,包括设置请求头、定位HTML标签、提取关键信息等关键步骤,提供了可直接运行的完整代

民乐团扒谱机的博客 1417

Python实战:学生信息管理系统的文件持久化与异常处理全解析

在程序设计课程中,文件读写与异常处理是构建可靠命令行应用的基础。学生信息管理系统作为经典练手项目,核心在于数据持久化——通过JSON格式存储,利用字典结构实现增删改查。掌握编码指定、路径定位与输入校验,能有效避免中文乱码、数据丢失等常见问题。这类系统广泛应用于教务管理、小型工具开发等场景,其设计思路也可自然迁移到数据库与图形界面升级。本文从需求拆解到代码实现,完整演示一个可持久化运行的学生管理程序,帮助开发者夯实Python工程能力。

weixin_31412781的博客 249

第十一章 Python编程基础——项目实战

前面基本介绍了python的基础,现在让我们开始实战吧!(答案在最下面)大家可以贴上自己的答案一起讨论!第一章:变量与数据类型class Car:my_car = Car("Toyota", "红色")进阶项目:实现图书馆管理系统(类包含 Book 和 Library,支持借阅归还)。第九章:常用库与实战。

m0_49633491的博客 513
上一篇: 【第六章】Python 函数基本介绍(详细版)​
下一篇: 【网络通信】TCP/IP 协议全方位解析​
软测进阶
博客等级 码龄9年 2867粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值