当前位置: 首页 > news >正文

Python异常处理:从入门到精通的实用指南

Langchain系列文章目录

01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!

python系列文章目录

01-Python 基础语法入门:从变量到输入输出,零基础也能学会!
02-Python 流程控制终极指南:if-else 和 for-while深度解析
03-Python 列表与元组全攻略:从新手到高手的必备指南
04-Python 字典与集合:从入门到精通的全面解析
05-Python函数入门指南:从定义到应用
06-Python 函数高级特性:从默认参数到闭包的全面解析
07-Python 模块与包:从零到自定义的全面指南
08-Python异常处理:从入门到精通的实用指南


文章目录

  • Langchain系列文章目录
  • python系列文章目录
  • 前言
  • 一、异常的概念与常见类型
    • 1.1 异常是什么
      • 1.1.1 异常的实际意义
      • 1.1.2 为什么需要异常处理
    • 1.2 常见的异常类型
      • 1.2.1 示例代码:常见异常
      • 1.2.2 应用场景
  • 二、try-except语句的使用
    • 2.1 try-except基本用法
      • 2.1.1 示例代码:捕获单一异常
      • 2.1.2 应用场景
    • 2.2 捕获多个异常
      • 2.2.1 示例代码:多异常处理
      • 2.2.2 注意事项
      • 2.2.3 进阶用法:获取异常信息
  • 三、自定义异常
    • 3.1 如何创建自定义异常
      • 3.1.1 示例代码:简单自定义异常
      • 3.1.2 进阶示例:带参数的自定义异常
    • 3.2 自定义异常的优势
      • 3.2.1 应用场景
      • 3.2.2 注意事项
  • 四、总结


前言

在Python编程中,异常处理是提升代码健壮性和用户体验的关键技能。无论是初学者还是进阶开发者,掌握异常处理都能让你的程序在面对错误时从容应对,而不是直接崩溃。本文将从基础入手,详细讲解异常的概念、try-except语句的用法以及自定义异常的创建,帮助你构建系统的知识体系,提升代码质量。

无论你是想快速上手异常处理,还是希望深入探索其高级应用,这篇文章都能满足你的需求。通过通俗易懂的语言、清晰的代码示例和实际案例,你将学会如何让代码更可靠、更专业。


一、异常的概念与常见类型

异常是Python程序运行时遇到的错误或意外情况。理解异常的本质和常见类型,是掌握异常处理的第一步。

1.1 异常是什么

异常是指程序在执行过程中遇到的非正常情况,会打断代码的正常运行。Python通过内置的异常类来表示这些错误,比如除以零、文件找不到等。

1.1.1 异常的实际意义

异常处理的核心目标是让程序在出错时不崩溃,而是优雅地处理问题。例如,当读取文件失败时,可以提示用户检查路径,而不是让程序直接终止。

1.1.2 为什么需要异常处理

  • 提升稳定性:避免程序因小错误而崩溃。
  • 改善用户体验:提供友好的错误提示。
  • 便于调试:通过异常信息快速定位问题。

1.2 常见的异常类型

Python内置了许多异常类,以下是初学者和开发者最常遇到的几种:

异常类型描述示例场景
SyntaxError语法错误代码缩进错误或拼写错误
NameError变量未定义使用未声明的变量
TypeError类型错误将字符串与整数相加
ValueError值错误将“abc”转为整数
FileNotFoundError文件未找到试图打开不存在的文件

1.2.1 示例代码:常见异常

# NameError 示例  
print(undefined_variable)  # 输出:NameError: name 'undefined_variable' is not defined  # TypeError 示例  
result = "123" + 456       # 输出:TypeError: can only concatenate str (not "int") to str  # ValueError 示例  
num = int("abc")           # 输出:ValueError: invalid literal for int() with base 10: 'abc'  

1.2.2 应用场景

了解这些异常类型能帮助你在写代码时提前预防问题,并在后续异常处理中准确捕获特定错误。例如,处理用户输入时,可能需要特别关注ValueError


二、try-except语句的使用

try-except是Python中最基础、最常用的异常处理工具。它允许你在代码出错时执行备用方案,而不是让程序崩溃。

2.1 try-except基本用法

基本语法如下:

try:  # 可能出错的代码  
except 异常类型:  # 处理异常的代码  

2.1.1 示例代码:捕获单一异常

try:  result = 10 / 0  # 除以零会触发异常  
except ZeroDivisionError:  print("错误:除数不能为零!")  
# 输出:错误:除数不能为零!  

这里,try块尝试执行除法操作,当发生ZeroDivisionError时,程序跳转到except块打印提示信息。

2.1.2 应用场景

try-except特别适合保护容易出错的操作,比如:

  • 文件读写(防止文件不存在)。
  • 网络请求(处理连接失败)。
  • 用户输入(避免无效数据)。

2.2 捕获多个异常

有时需要处理多种可能的异常,可以在一个except中捕获多个异常,或使用多个except分支。

2.2.1 示例代码:多异常处理

try:  num = int(input("请输入一个数字:"))  result = 10 / num  
except ValueError:  print("错误:请输入有效的数字!")  
except ZeroDivisionError:  print("错误:除数不能为零!")  

2.2.2 注意事项

  • 捕获顺序:先捕获具体的异常(如ValueError),再捕获广义的异常(如Exception)。
  • 避免过度捕获:不要用except Exception捕获所有异常,这样可能隐藏严重问题。

2.2.3 进阶用法:获取异常信息

可以用as关键字获取异常的详细信息:

try:  file = open("nonexistent.txt", "r")  
except FileNotFoundError as e:  print(f"文件错误:{e}")  
# 输出:文件错误:[Errno 2] No such file or directory: 'nonexistent.txt'  

三、自定义异常

当内置异常无法满足特定需求时,可以创建自定义异常,让代码更具可读性和针对性。

3.1 如何创建自定义异常

自定义异常通常继承自Exception类,并可以添加特定逻辑。

3.1.1 示例代码:简单自定义异常

class MyCustomError(Exception):  pass  try:  age = -1  if age < 0:  raise MyCustomError("年龄不能为负数!")  
except MyCustomError as e:  print(e)  
# 输出:年龄不能为负数!  

3.1.2 进阶示例:带参数的自定义异常

class StockError(Exception):  def __init__(self, item, stock):  self.item = item  self.stock = stock  self.message = f"{item} 库存不足,仅剩 {stock} 件"  super().__init__(self.message)  try:  stock = 5  if stock < 10:  raise StockError("手机", stock)  
except StockError as e:  print(e)  
# 输出:手机 库存不足,仅剩 5 件  

3.2 自定义异常的优势

  • 清晰表达意图:异常名称直接反映错误类型(如StockError)。
  • 便于维护:集中管理特定业务逻辑的错误。
  • 增强扩展性:可以添加额外属性或方法。

3.2.1 应用场景

自定义异常在以下场景特别有用:

  • 用户认证(AuthenticationError)。
  • 业务逻辑校验(InsufficientFundsError)。
  • 数据验证(InvalidInputError)。

3.2.2 注意事项

  • 保持异常类简单,避免过度复杂化。
  • 异常信息要具体,便于排查问题。

四、总结

本文从基础到进阶,全面讲解了Python异常处理的核心内容:

  • 异常的概念与类型:理解异常本质,熟悉常见错误。
  • try-except用法:掌握异常捕获的基本和多异常处理技巧。
  • 自定义异常:学会创建特定需求的异常类,提升代码表达力。

通过这些知识,你可以让代码在面对错误时更稳定、更专业。建议在实际项目中多实践,例如为文件操作添加异常处理,或为业务逻辑设计自定义异常。异常处理不仅是技术,更是编程思维的体现。


相关文章:

Python异常处理:从入门到精通的实用指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

【AVL树】—— 我与C++的不解之缘(二十三)

什么是AVL树&#xff1f; AVL树发明者是G. M. Adelson-Velsky和E. M. Landis两个前苏联科学家&#xff0c;他们在1962年论文《An algorithm for the organization of information》中发表了AVL树。AVL树是最先发明的自平衡二叉搜索树&#xff0c;说白了就是能够自己控制平衡结构…...

用大白话解释日志处理Log4j 是什么 有什么用 怎么用

Log4j是什么&#xff1f; Log4j就像程序的“黑匣子”&#xff0c;专门用来记录软件运行时的各种信息&#xff0c;比如哪里报错、性能如何、用户操作轨迹等。它是Java领域最常用的日志框架之一&#xff0c;可以灵活控制日志内容、输出位置&#xff08;控制台、文件、数据库等&a…...

无人机遥控器的亮度 和 两个工作频率

工作频率 2.4000-2.4835 GHz &#xff0c; 5.725-5.850 GHz 1.这是一个无人机的遥控器的两个工作频率&#xff0c;为什么会有两个工作频率&#xff1f; 无人机的遥控器采用双频段设计&#xff08;2.4GHz 和 5.8GHz&#xff09;&#xff0c;主要是为了解决以下问题并优化性…...

【Linux】命令行参数 | 环境变量(四)

目录 前言&#xff1a; 一、命令行参数&#xff1a; 1.main函数参数 2.为什么有它&#xff1f; 二、环境变量&#xff1a; 1.main函数第三个参数 2.查看shell本身环境变量 3.PATH环境变量 4.修改PATH环境变量配置文件 5.HOME环境变量 6.SHELL环境变量 7.PWD环境变…...

算法002——复写零

力扣——复写零点击即可跳转 这道题还是运用 双指针&#xff0c;我们从左往右开始&#xff0c;让 cur 0&#xff0c;dest 0,当我们循环时&#xff0c;会覆盖后面的值&#xff0c;所以从左到右无法实现&#xff0c;我们运用 从右到左的方式。 以示例一数组为例&#xff0c;从…...

例子 DQN + CartPole: 深入思考一下,强化学习确实是一场智能冒险之旅!

强化学习的概念 在技术人员眼里&#xff0c;深度学习、强化学习&#xff0c;或者是大模型&#xff0c;都只是一些算法。无论是简单&#xff0c;还是复杂&#xff0c;我们都是平静的看待。当商业元素日益渗透进技术领域&#xff0c;人人言必称大模型的时候。技术人该反思一下&a…...

java 实现xxl-job定时任务自动注册到调度中心

xxl-job 自动注册(执行器和任务) 前言 xxl-job是一个功能强大、简单易用、高可用且可扩展性强的分布式定时任务框架/分布式任务调度平台。它适用于各种需要定时任务调度的场景,并可根据业务需求进行灵活配置和扩展。 xxl-job简介 xxl-job是一个开源的分布式定时任务框架,…...

esp32串口通信

1、线路图 2、打开电脑的串口终端 3、eps32通过串口往电脑的串口终端输出信息&#xff1a; from machine import UART, Pin import time# 初始化UART0&#xff0c;波特率设置为115200 uart UART(0, baudrate115200, tx1, rx3)# 主循环 while True:# 要发送的消息#某些串口终…...

蓝桥杯备赛-前缀和-可获得的最小取值

问题描述 妮妮学姐手头有一个长度为 nn 的数组 aa&#xff0c;她想进行 kk 次操作来取出数组中的元素。每次操作必须选择以下两种操作之一&#xff1a; 取出数组中的最大元素。取出数组中的最小元素和次小元素。 妮妮学姐希望在进行完 kk 次操作后&#xff0c;取出的数的和最…...

UniApp 中封装 HTTP 请求与 Token 管理(附Demo)

目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习&#xff0c;上述实战代码来源&#xff1a;芋道源码/yudao-mall-uniapp 该代码中&#xff0c;通过自定义 request 函数对 HTTP 请求进行了统一管理&#xff0c;并且结合了 Token 认证机制 请求封装原理&#xff…...

边缘计算+多模态感知:户外监控核心技术解析与工程部署实践!户外摄像头监控哪种好?户外摄像头监控十大品牌!格行视精灵VS海康威视VS大华横评!

一、核心参数解析与选型逻辑 1.环境适应性设计 极端天气防护&#xff1a;优先选择IP66/67防护等级的设备&#xff0c;例如格行视精灵通过IP67防水防尘设计可应对暴雨、沙尘暴等复杂环境&#xff0c;其密封轴承结构可有效防止水汽侵蚀内部电路。 温度耐受范围&#xff1a;北方…...

Spring项目-抽奖系统(实操项目)(ONE)

^__^ (oo)\______ (__)\ )\/\ ||----w | || || 一&#xff1a;前言&#xff1a; 随着互联网技术的快速发展&#xff0c;线上营销活动已成为企业吸引用户、…...

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 测速模块 语音模块SU-03T 网站&#xff1a;智能公元/AI产品零代码平台 一、让小车动起来 新建文件夹智能小车项目 在里面…...

Python:字符串常见操作

find(子字符串&#xff0c;开始位置下标&#xff0c;结束位置下标) 注意&#xff1a;开始位置和结束位置下标可以省略&#xff0c;表示在整个字符串中查找 stasdfghjkl print(st.find(a))#输出结果为0&#xff0c;表明a在第一个位置默认从零开始&#xff0c;找不到则返回-1 …...

Redis 哈希(Hash)

Redis 哈希(Hash) 概述 Redis 哈希&#xff08;Hash&#xff09;是一种特殊的键值对类型&#xff0c;它允许存储结构化的数据&#xff0c;例如一个对象或记录。每个哈希值可以包含多个字段&#xff0c;每个字段又可以存储一个字符串值。这使得Redis哈希非常适合用于存储对象的…...

Windows对比MacOS

Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1&#xff1a;打开环境变量设置窗口步骤 2&#xff1a;添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1&#xff1a;打开终端步骤 2&#xff1a;编辑环境变量配置文件步骤 3&#xff1…...

react 路由跳转的几种方式

在 React 中&#xff0c;路由跳转通常通过 react-router-dom&#xff08;或类似的路由库&#xff09;来实现。以下是几种常见的路由跳转方式&#xff1a; 1. 使用 <Link> 组件 <Link> 是最简单的路由跳转方式&#xff0c;它会生成一个 <a> 标签&#xff0c…...

2.你有什么绝活儿?—Java能做什么?

1、Java的绝活儿&#xff1a;要问Java有什么绝活&#xff0c;我觉得它应该算是一位魔法师&#xff0c;会的绝活儿有很多&#xff0c;要说最能拿得出手的当属以下三个。 1.1 平台无关性&#xff1a;Java可以在任何地方施展魔法&#xff0c;无论是Windows、Linux还是Mac&#xf…...

2025年2月文章一览

2025年2月编程人总共更新了17篇文章&#xff1a; 1.2025年1月文章一览 2.《Operating System Concepts》阅读笔记&#xff1a;p2-p8 3.《Operating System Concepts》阅读笔记&#xff1a;p9-p12 4.《Operating System Concepts》阅读笔记&#xff1a;p13-p16 5.《Operati…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...