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

Python错误处理指南:优雅应对异常情况

目录

      • 一. 异常是什么?
      • 二. 使用 `try` 和 `except`
      • 三. 捕获多个异常
      • 四. 使用 `else`
      • 五. 使用 `finally`
      • 六. 自定义异常
      • 七.Python中常见异常处理类型
      • 八.Python中常见异常处理实例
      • 九.异常处理最佳实践
      • 十.结论

当编写Python代码时,错误处理是一个重要的方面,它可以确保您的程序在出现异常情况时能够以一种有序的方式进行处理。这个教程将介绍Python中的错误处理技术,以及如何使用tryexceptelsefinally来处理异常。我们还将讨论一些常见的错误类型和如何自定义异常。

一. 异常是什么?

在Python中,异常是指在程序运行过程中出现的错误或意外情况。当程序出现异常时,它将停止正常执行并引发一个异常对象,除非您显式地处理这个异常,否则程序将终止。

二. 使用 tryexcept

tryexcept 是Python中最基本的错误处理机制。您可以将可能引发异常的代码放在try块中,然后使用except块来处理异常。

try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:# 处理ZeroDivisionError异常print("除以零错误发生了")

在这个示例中,我们尝试将10除以0,这会引发一个ZeroDivisionError异常。except块捕获该异常并输出错误消息。

三. 捕获多个异常

您可以使用多个except块来捕获不同类型的异常,并为每种异常类型提供不同的处理方式。

try:value = int(input("请输入一个整数:"))result = 10 / value
except ZeroDivisionError:print("除以零错误")
except ValueError:print("无效的输入")

四. 使用 else

else块用于在没有异常发生时执行代码。

try:value = int(input("请输入一个整数:"))result = 10 / value
except ZeroDivisionError:print("除以零错误")
except ValueError:print("无效的输入")
else:print(f"结果是:{result}")

五. 使用 finally

finally块中的代码无论是否发生异常都会执行。

try:value = int(input("请输入一个整数:"))result = 10 / value
except ZeroDivisionError:print("除以零错误")
except ValueError:print("无效的输入")
else:print(f"结果是:{result}")
finally:print("无论如何都会执行这里的代码")

六. 自定义异常

您可以创建自定义异常类来处理特定的错误情况。

class CustomError(Exception):def __init__(self, message):self.message = messagetry:if some_condition:raise CustomError("自定义异常发生了")
except CustomError as e:print(f"自定义异常:{e}")

七.Python中常见异常处理类型

Python中有许多内置的错误和异常处理类型。以下是一些常见的错误和异常处理类型的列表:

  1. SyntaxError:语法错误,通常是由于代码书写错误而引发的,例如拼写错误、缺少冒号或括号不匹配等。

  2. IndentationError:缩进错误,通常是由于代码块的缩进不正确而引发的,例如在缩进块内部使用不一致的缩进。

  3. NameError:名称错误,通常是由于尝试使用未定义的变量或函数而引发的。

  4. TypeError:类型错误,通常是由于操作不兼容的数据类型而引发的,例如尝试将字符串与整数相加。

  5. ZeroDivisionError:除以零错误,通常是由于尝试在除法操作中除以零而引发的。

  6. IndexError:索引错误,通常是由于尝试访问不存在的列表元素或字符串字符而引发的。

  7. KeyError:键错误,通常是由于尝试访问不存在于字典中的键而引发的。

  8. ValueError:值错误,通常是由于函数接收到无效的参数值而引发的,例如尝试将无法转换为整数的字符串传递给int()函数。

  9. FileNotFoundError:文件未找到错误,通常是由于尝试打开或读取不存在的文件而引发的。

  10. ImportError:导入错误,通常是由于模块导入失败而引发的,可能是因为模块不存在或无法找到。

  11. AttributeError:属性错误,通常是由于尝试访问对象上不存在的属性或方法而引发的。

  12. KeyError:键错误,通常是由于尝试访问不存在于字典中的键而引发的。

  13. AssertionError:断言错误,通常是由于assert语句的条件为假而引发的。

  14. RuntimeError:运行时错误,通常是由于一般性的运行时问题而引发的。

这些是Python中一些常见的内置错误和异常处理类型。请注意,还有许多其他特定于库或框架的异常类型,这些异常类型通常在相应的文档中进行了描述。在实际编程中,您可能会遇到各种自定义异常,以适应特定应用程序的需求。要了解完整的异常处理类型列表,请参阅Python官方文档。

八.Python中常见异常处理实例

当处理不同类型的异常时,通常需要编写代码来捕获和处理这些异常。以下是一些常见异常类型的代码示例及其修复方法:

  1. ZeroDivisionError:除以零错误
try:result = 10 / 0
except ZeroDivisionError:print("除以零错误发生了")

修复:在进行除法操作之前,确保分母不是零。

  1. ValueError:值错误
try:value = int("abc")
except ValueError:print("值错误:无法将字符串转换为整数")

修复:确保传递给函数的参数值是有效的。

  1. FileNotFoundError:文件未找到错误
try:with open("nonexistent_file.txt", "r") as file:content = file.read()
except FileNotFoundError:print("文件未找到")

修复:确保文件存在于指定的路径中。

  1. KeyError:键错误
try:my_dict = {"name": "John", "age": 30}value = my_dict["email"]
except KeyError:print("键错误:字典中不存在 'email' 键")

修复:在尝试访问键之前,确保该键存在于字典中。

  1. AttributeError:属性错误
class MyClass:def __init__(self):self.value = 42try:obj = MyClass()attribute = obj.name
except AttributeError:print("属性错误:'MyClass' 对象没有 'name' 属性")

修复:确保对象具有所需的属性或方法,或者检查拼写错误。

  1. AssertionError:断言错误
assert 2 + 2 == 5, "2 + 2 不等于 5"

修复:检查assert语句的条件是否满足,或者根据需要更改条件。

这些是一些常见异常类型的示例以及相应的修复方法。当处理异常时,确保根据您的应用程序逻辑采取适当的措施来恢复或修复问题。

  1. Exception: 通用异常处理
try:# 可能引发异常的代码except Exception as e:# 通用异常处理print(f"发生了异常:{e}")

通用异常处理通常用于以下情况:

  1. 记录异常:将异常信息记录到日志文件中,以便后续分析。
  2. 恢复程序状态:在发生异常后尝试恢复程序状态,以便程序可以继续运行。
  3. 提供友好的用户界面:向用户显示有关异常的友好错误消息,而不是将异常的详细信息暴露给用户。

九.异常处理最佳实践

以下是一些处理异常的最佳实践:

  1. 不要过于宽泛地捕获异常,而应仅捕获您知道如何处理的异常。
  2. 最好将异常信息记录下来,以便调试和故障排除。
  3. 避免捕获所有异常,因为这可能会掩盖代码中的潜在问题。
  4. 使用异常处理来提高代码的可读性和可维护性,而不是用于控制程序流程。

十.结论

在Python中,异常处理是编写稳定和可靠代码的关键部分。通过使用try-except语句以及多个except、else和finally块,您可以更好地应对各种异常情况。同时,自定义异常类可以帮助您更好地表示特定的异常情况。遵循异常处理的最佳实践将有助于您编写更健壮的Python程序,提供更好的用户体验和更容易的故障排除。

无论您是初学者还是有经验的Python开发人员,掌握异常处理技巧都将为您的编程生涯增添不少价值。在编写代码时,请牢记这些技巧,以便优雅地应对异常情况。


  • 📢博客主页:https://blog.csdn.net/qq233325332
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 陌北v1 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

Python错误处理指南:优雅应对异常情况

目录 一. 异常是什么?二. 使用 try 和 except三. 捕获多个异常四. 使用 else五. 使用 finally六. 自定义异常七.Python中常见异常处理类型八.Python中常见异常处理实例九.异常处理最佳实践十.结论 当编写Python代码时,错误处理是一个重要的方面&#xff…...

MySQL学习笔记12

MySQL 查询语句: 1、查询五子句:(重点) mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句; 1)where 子句;条件筛选。 2)group…...

【owt】构建m79的owt-client-native:使用vs2017

家里电脑换成了台式机,拷贝代码发现了三年前的owt客户端mfc工程。 不用下载第三方库,试着构建下: owt-client-native 我这里有3年前的代码,思索了下还是用vs2017构建吧: 重新构建一下 选用x86 的 vs2017 vs的命令行控制台 cls可以清理屏幕 之前构建过vs2022的webrtc原版 …...

Cpp/Qt-day020918Qt

目录 完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两…...

Spring面试题10:Spring的XMLBeanFactory怎么使用

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…...

自定义数据类型

前言:小伙伴们又见面啦,今天这篇文章,我们来谈谈几种自定义数据类型。 目录 一.都有哪些自定义数据类型 二.结构体 结构体内存对齐 1.如何对齐 2.为什么要对齐 3.节省空间和提升效率的方法 (1)让占用空间小的成员…...

产品团队的需求验证和确认

需求核实过程是确保软件满足特定的规格要求,而验证则侧重于软件是否达到了最终用户的期望和需求。 如果你正在开发一种医疗产品,这种区别也可能在法规和标准中有所体现,例如: 820.30(f):设计验证应确认设计的成果符合…...

【JVM】类加载的过程

文章目录 类的生命周期加载验证准备解析初始化简要概括 类的生命周期 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备&#xf…...

Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型

上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别,本文讲解下分组、上下文和属性值类型 分组输出 slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容,取决于使用的 handler,例如 TextHandler 使用点号分隔…...

小白学Python:提取Word中的所有图片,只需要1行代码

#python# 大家好,这里是程序员晚枫,全网同名。 最近在小破站账号:Python自动化办公社区更新一套课程:给小白的《50讲Python自动化办公》 在课程群里,看到学员自己开发了一个功能:从word里提取图片。这个…...

pip修改位于用户目录下的缓存目录

默认 pip 缓存目录: Windows: C:\Users\${用户名}\AppData\Local\pip\cache Linux: ~/.cache/pip 一、修改方式 1.命令方式 pip config set global.cache-dir "D:\kwok\data\pip-cache" 2.配置文件方式 ① Windows: C:\Users\${用…...

更新、修改

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法: update 表名 列名该列新值, 列名该列新值, ... where 记录匹配条件; 说明:update 更新、修改 set 设置 …...

山西电力市场日前价格预测【2023-09-25】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-25)山西电力市场全天平均日前电价为442.30元/MWh。其中,最高日前电价为720.46元/MWh,预计出现在19: 00。最低日前电价为276.06元/MWh,预计…...

从collections库的Counter类看items()方法和enumerate()方法

下面的代码是针对文件的词频统计,使用了collections库及其Counter类 import collections def count_word_frequency(text): words text.lower().split() word_counts collections.Counter(words) return word_counts def count_fileword_frequency(fi…...

2023-09-24 LeetCode每日一题(LRU 缓存)

2023-09-24每日一题 一、题目编号 146. LRU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存i…...

《计算机视觉中的多视图几何》笔记(10)

10 3D Reconstruction of Cameras and Structure 本章主要描述了如何利用2张图片来恢复相机的参数以及物体在三维空间中的形状。 文章目录 10 3D Reconstruction of Cameras and Structure10.1 Outline of reconstruction method10.2 Reconstruction ambiguity10.3 The proje…...

【一、虚拟机vmware安装】

安装虚拟机 下载 官方下载地址:https://www.vmware.com/cn.html 大概流程就是,最重要的事最后一步...

uniapp 离线打包 plus.runtime.install 安装页面不弹起

uniapp 离线打包 plus.runtime.install 安装页面不弹起 updateVersion(webview : any, eventTitle : string, eventContent : string) {const loading plus.nativeUI.showWaiting(准备下载);var dtask plus.downloader.createDownload(eventContent,{method: GET,timeout: 5…...

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接:1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…...

北工大汇编题——分支程序设计

题目要求 信息检素程序设计:在数据区,有9个不同的信息,编号 0-8,每个信息包括20 个字符。从键盘接收 0-8 之间的一个编号,然后再屏幕上显示出相应编号的信息内容,按“q”键退出 完整代码 DATAS SEGMENTn0…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found"​, "n…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…...