Python中的Exception和Error

news/2024/9/22 12:33:00/

在Python中,Exception和Error都是用来描述程序运行时出现的异常情况。它们的主要区别在于,Exception通常用于表示可预见的异常情况,而Error通常用于表示不可预见的异常情况。

具体来说,以下情况通常需要定义Exception

  1. 当程序需要处理某种可预见的异常情况时,可以定义一个Exception类来表示这种异常情况。例如,如果程序需要处理某个文件不存在的情况,可以定义一个FileNotFoundError类来表示这种异常情况。

  2. 当程序需要向调用者报告某种异常情况时,可以抛出一个Exception对象来表示这种异常情况。例如,如果程序在处理某个输入时发现了错误,可以抛出一个ValueError对象来表示这种异常情况。

以下情况通常需要定义Error

  1. 当程序出现了某种不可预见的异常情况时,可以定义一个Error类来表示这种异常情况。例如,如果程序在执行过程中遇到了系统错误,可以定义一个SystemError类来表示这种异常情况。

  2. 当程序出现了某种无法恢复的异常情况时,可以抛出一个Error对象来表示这种异常情况。例如,如果程序在执行过程中遇到了无法处理的内存错误,可以抛出一个MemoryError对象来表示这种异常情况。

需要注意的是,Exception和Error都是Python中内置的类和对象,程序员可以根据实际情况继承这些类,或者自定义新的类来表示不同的异常情况。在实际编程中,通常需要根据具体的需求和设计来选择使用Exception还是Error。

附 举例python 中第三方库Redis的异常处理

Redis中异常定义

python">"Core exceptions raised by the Redis client"class RedisError(Exception):passclass ConnectionError(RedisError):passclass TimeoutError(RedisError):passclass AuthenticationError(ConnectionError):passclass AuthorizationError(ConnectionError):passclass BusyLoadingError(ConnectionError):passclass InvalidResponse(RedisError):passclass ResponseError(RedisError):passclass DataError(RedisError):passclass PubSubError(RedisError):passclass WatchError(RedisError):passclass NoScriptError(ResponseError):passclass ExecAbortError(ResponseError):passclass ReadOnlyError(ResponseError):passclass NoPermissionError(ResponseError):passclass ModuleError(ResponseError):passclass LockError(RedisError, ValueError):"Errors acquiring or releasing a lock"# NOTE: For backwards compatibility, this class derives from ValueError.# This was originally chosen to behave like threading.Lock.passclass LockNotOwnedError(LockError):"Error trying to extend or release a lock that is (no longer) owned"passclass ChildDeadlockedError(Exception):"Error indicating that a child process is deadlocked after a fork()"passclass AuthenticationWrongNumberOfArgsError(ResponseError):"""An error to indicate that the wrong number of argswere sent to the AUTH command"""pass

异常创建和抛出

python">    def connect_to(self, address):self.host, self.port = addresssuper().connect()if self.connection_pool.check_connection:self.send_command("PING")if str_if_bytes(self.read_response()) != "PONG":raise ConnectionError("PING failed")

异常捕获和处理

python">    def _connect_retry(self):if self._sock:return  # already connectedif self.connection_pool.is_master:self.connect_to(self.connection_pool.get_master_address())else:for slave in self.connection_pool.rotate_slaves():try:return self.connect_to(slave)except ConnectionError:continueraise SlaveNotFoundError  # Never be here


http://www.ppmy.cn/news/1434807.html

相关文章

Python 二叉树的基本操作实现

在Python中实现二叉树的基本操作通常涉及以下步骤: 定义二叉树节点:创建一个类来表示二叉树的节点,通常包含一个数据属性和指向左右子节点的指针。 创建二叉树:允许用户输入数据来构建二叉树。 遍历二叉树:实现前序、…

【前端技术】CSS基础入门篇

一、 CSS简介 css&#xff08;Cascading Style Sheets&#xff0c;缩写为 CSS&#xff0c;也叫作层叠样式表&#xff09;是一套美化HTML标签所编写出页面的语法&#xff0c;CSS描述了如何在不同设备上渲染内容的方法。 二、 CSS基本引入方法 <!-- Cascading style shet:层…

QWidget | Qt::WindowType 枚举的取值及意义QFlags 模板类详解

01 与 QWidget 类有关的部分类的继承图 3、QObject 是所有 Qt 对象的基类,QPaintDevie 是所有可绘制对象的基类。 4、QWidget 类是所有用户界面对象的基类,QWidget 及其子类是开发桌面应用的核心,这些类都位于 QtWidgets 模块内,注意:QtWidgets 是模块,QWidget 是类(少一…

2024蓝桥杯每日一题(分解质因数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;约数个数 试题二&#xff1a;分解质因数 试题三&#xff1a;质因数个数 试题四&#xff1a;完全平方数 试题五&#xff1a;阶乘分解 试题一&#xff1a;约数个数 【题目描述】…

小白人群想找通信网优的工作,需要注意什么?

6月毕业季&#xff0c;距离各大院校学生毕业时间不足2个月&#xff0c;有些求职者已经开始投递简历&#xff0c;明确自己未来的发展方向。 一些小伙伴们也纷纷后台私信我们想找通信网优的工作&#xff0c;因为学校开设的相关课程比较少&#xff0c;不知道学什么才比较好找这方面…

[NSSCTF]-Reverse:[HUBUCTF 2022 新生赛]simple_RE(base64换表)

无壳 查看ida 可以看得出是base64&#xff0c;而且是换表的。 完整exp&#xff1a; import base64 result5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8 biaostr.maketrans(qvEJAfHmUYjBacu8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD,ABCDEFGHIJKLMNOPQR…

SpringBoot+Vue开发记录(四)

说明&#xff1a; 本篇文章的主要内容是软件架构以及项目的前端Vue创建 一、软件架构 我道听途说的&#xff0c;听说这个东西很关键很重要什么的。 软件架构&#xff08;software architecture&#xff09;是一个系统的草图,是一系列相关的抽象模式&#xff0c;用于指导大型软…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…