6 Python的异常处理
概述
在上一节,我们介绍了Python的面向对象编程,包括:类的定义、类的使用、类变量、实例变量、实例方法、类方法、静态方法、类的运算符重载、继承等内容。在这一节中,我们将介绍Python的异常处理。异常是指程序在运行过程中出现的不正常情况,如文件找不到、除数为零等。异常处理就是要让程序在遇到这些问题时,能够进行合理的处理,避免因错误而导致的程序崩溃和无法预测的行为。
异常
Python中的异常种类非常多,下面列举了一些常见的异常。
SyntaxError:语法错误,比如,代码格式不正确,或者关键字拼写错误。
TypeError:类型错误,比如,将不同类型的对象进行操作,或者函数参数类型不匹配。
ValueError:数值错误,比如,对字符串进行数值计算时,出现无效的输入。
KeyError:键错误,比如,在字典中查找不存在的键时,出现错误。
IndexError:索引错误,比如,在列表或字符串中获取不存在的索引时,出现错误。
IOError:输入输出错误,比如,文件找不到或无法读取。
Exception:通用异常,可以捕获所有类型的异常。
# 运行异常:ValueError: invalid literal for int() with base 10: 'hello'
a = int('hello')
b = 'CSDN'
# 运行异常:IndexError: string index out of range
print(b[6])
c = ['C', 'S', 'D', 'N']
# 运行异常:ValueError: list.remove(x): x not in list
c.remove('H')
异常处理
Python中的异常处理结构使用try、except、else、finally这四个关键字。其中,try和except是必需的,而else和finally是可选的。
try:# 可能会引发异常的代码块x = 1 / 0
except ZeroDivisionError:# 当try块中发生ZeroDivisionError异常时,执行的代码块print("divided by zero")
else:# 当try块中没有发生任何异常时,执行的代码块print("no exception")
finally:# 无论是否发生异常,都会执行的代码块print("completed")
在上面的示例代码中,try块中的代码可能会引发ZeroDivisionError异常。当这个异常发生时,程序会跳转到与该异常对应的except块中执行。如果try块中的代码没有引发任何异常,程序会跳过except块并执行else块中的代码。无论是否发生异常,最终都会执行finally块中的代码。
有时候,我们可能想要捕获所有类型的异常。这时,可以使用Exception类来捕获所有异常。
try:x = 1 / 0
except Exception as e:# 输出:exception is: division by zeroprint('exception is:', e)
在上面的示例代码中,Exception可以捕获所有类型的异常,并将异常对象存储在变量e中。我们可以使用e来获取关于异常的更多信息,比如:错误消息、堆栈跟踪等。
有时候,我们可能想要对不同类型的异常进行不同的处理。这时,可以在一个try块中使用多个except块来捕获不同类型的异常,也可以在同一个except块中同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
try:x = int('hello')
except ValueError:print('must be number')
except (TypeError, KeyError, IndexError):print('type error')
except Exception as e:print('other exception:', e)
在上面的示例代码中,try块中的代码可能会引发ValueError或TypeError异常。根据异常类型的不同,程序会跳转到相应的except块中执行相应的处理逻辑。如果try块中的代码发生了除ValueError和TypeError之外的其他异常,程序会跳转到最后一个except块中执行处理逻辑。
有时候,我们可能想要在不发生异常时才进行相应的处理。这时,可以在所有except块最后添加else块。
try:x = int('66')
except (ValueError, TypeError):print('must be number')
else:print('no exception')
还有时候,我们可能想要无论是否发生异常都执行某些操作。这时,可以使用finally块,这可以用来进行释放资源、关闭文件等操作。需要注意的是,即使finally块中发生了异常,也不会影响之前已经发生的异常的处理逻辑。
try:x = int('CSDN')
except (ValueError, TypeError):print('must be number')
finally:print('completed')
抛出异常
在Python中,可以通过使用raise语句来主动抛出异常。raise语句的语法格式如下:
raise [exceptionName [(reason)]]
其中,用[]括起来的为可选参数,其作用是指定抛出的异常名称,以及异常的相关描述。如果可选参数全部省略,则raise会默认抛出RuntimeError异常。如果仅省略reason,则在抛出异常时,将不带任何的异常描述信息。
try:a = 100if a > 66:raise ValueError('value error: {}'.format(a))
except ValueError as e:print(e)
在上面的示例代码中,当a大于66时,我们主动抛出了ValueError类型的异常,并给出了异常描述信息。在except代码块中,我们捕获了异常,并输出了这个异常的具体信息。
用户自定义异常
在Python中,可以创建用户自定义的异常,这是通过创建一个新的异常类型来实现的。这个新的异常类型通常从内置的异常类型Exception类派生出来,可以直接继承,也可以间接继承。
class MyCustomError(Exception):def __init__(self, msg, code):super().__init__(msg)self.code = codetry:raise MyCustomError('custom exception', -2)
except MyCustomError as e:# 输出:custom exception -2print(e, e.code)
相关文章:
6 Python的异常处理
概述 在上一节,我们介绍了Python的面向对象编程,包括:类的定义、类的使用、类变量、实例变量、实例方法、类方法、静态方法、类的运算符重载、继承等内容。在这一节中,我们将介绍Python的异常处理。异常是指程序在运行过程中出现的…...
【跨语言通讯】
传统的跨语言通讯方案: 基于SOAP消息格式的WebService 基于JSON消息格式的RESTful 服务 主要弊端: XML体积太大,解析性能极差 JSON体积相对较小,解析相对较快,但表达能力较弱 如今比较流行的跨语言通讯方案&…...

Android 基础知识
一、Activity 1、onSaveInstanceState(),onRestoreInstanceState的调用时机 onSaveInstanceState 调用时机 从最近应用中选择运行其他程序时 但用户按下Home键时 屏幕方向切换时 按下电源案件时 从当前activity启动一个新的activity时 onRestorInstanceState调用时机 只…...

Linux常用命令_帮助命令、用户管理命令、压缩解压命令
文章目录 1. 帮助命令1.1 帮助命令:man1.2 帮助命令:help1.3 其他帮助命令 2. 用户管理命令2.1 用户管理命令: useradd2.2 用户管理命令: passwd2.3 用户管理命令: who2.4 用户管理命令: w 3. 压缩解压命令3.1 压缩解压命令: gzip3.2 压缩解压命令: gunzip3.3 压缩解压命令: ta…...
解决 KylinOS “Could not get lock /var/lib/dpkg/lock”错误
最近,我遇到了 “Could not get lock /var/lib/dpkg/lock”的错误,我既不能安装任何软件包,也不能更新系统。此错误也与“Could not get lock /var/lib/apt/lists/lock”错误密切相关。以下是 Ubuntu 20.04 上的一些样本输出。 Reading package lists… Done E: Could not…...
PHP pdf 自动填写表单
一、下载github上的项目,地址 二、下载pdftk 地址 // 转化PDF模板 pdftk modele.pdf output modele2.pdf# 填充pdf文件中的表单 require(fpdm.php); $fields array(name > My name,address > My address,city > My city,phone > My phone nu…...
Win2016Server绑定多网卡实现负载均衡
一、服务器端: 1、输入ncpa.cpl打开网络连接,对要绑定的网卡勾掉IPV4,IPV4地址选择自动 2、输入servermanager.exe,打开服务器管理器 3、在 [本地服务器] 中,点后边的 “已禁用” ,在 [适配器和接口] 小窗口…...

微软宣布在 Excel 中使用 Python:结合了 Python 的强大功能和 Excel 的灵活性。
文章目录 Excel 中的 Python 有何独特之处?1. Excel 中的 Python 是为分析师构建的。高级可视化机器学习、预测分析和预测数据清理 2. Excel 中的 Python 通过 Anaconda 展示了最好的 Python 分析功能。3. Excel 中的 Python 在 Microsoft 云上安全运行,…...
学习心得03:OpenCV
数学真是不可思议,不管什么东西,都能用数学来处理。OpenCV以前也接触过,这次是系统学习一下。 颜色模型 RGB,YUV,HSV,Lab,GRAY 颜色转换cvtColor()/convertTo(),通道分离split()&…...

ubuntu学习(五)----读取文件以及光标的移动
1、读取文件函数原型介绍 ssize_t read(int fd,void*buf,size_t count) 参数说明: fd: 是文件描述符 buf:为读出数据的缓冲区; count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文…...

Python 数据分析——matplotlib 快速绘图
matplotlib采用面向对象的技术来实现,因此组成图表的各个元素都是对象,在编写较大的应用程序时通过面向对象的方式使用matplotlib将更加有效。但是使用这种面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块。…...

uniapp小程序位置信息配置
uniapp 小程序获取当前位置信息报错 报错信息: getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json 需要在manifest.json配置文件中进行配置:...
《基于 Vue 组件库 的 Webpack5 配置》1.模式 Mode 和 vue-loader
一定要配置 模式 Mode,这里有个小知识点,环境变量 process.env.NODE_ENV module.exports {mode: production,// process.env.NODE_ENV 或 development, }一定要配置 vue-loader Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用; …...

01.sqlite3学习——数据库概述
目录 重点概述总结 数据库标准介绍 什么是数据库? 数据库是如何存储数据的? 数据库是如何管理数据的? 数据库系统结构 常见关系型数据库管理系统 关系型数据库相关知识点 数据库与文件存储数据对比 重点概述总结 数据库可以理解为操…...

视频集中存储/云存储平台EasyCVR国标GB28181协议接入的报文交互数据包分析
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理…...

容器技术,1. Docker,2. Kubernetes(K8s):
目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 容器技术 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使…...
Jtti :sql server怎么备份数据库?
在 SQL Server 中备份数据库是一项重要的操作,它可以确保你的数据在意外情况下得以恢复。以下是在 SQL Server 中备份数据库的基本步骤: 使用 SQL Server Management Studio (SSMS) 进行备份: 打开 SQL Server Management Studio(SSMS)并连接…...

Stable Diffusion 系列教程 | 打破模型壁垒
目录 1.模型基本分类 1.1 CheckPoint 大模型/底模型/主模型 1.2 VAE美化模型/变分自编码器 1.3 HyperNetwork 超网络 1.4 embeddings(/Textual Inversion) 嵌入式向量 1.5 loRa 低秩适应模型 2. 下载途径和渠道 2.1 C站 2.1.1 如何筛选到自己需…...
Cypress 做 e2e 测试,如何在获得某个 checkbox 后先判断它是否被 check 然后再更改它的状态?
比如如果这个 checkbox 已经被 check 了,就不做操作,否则将它 check。 我们假设这个 checkbox 的 data-testid 属性是 VendorCodeCheckbox-0-test-id。Cypress 的代码如下: cy.getByTestId(VendorCodeCheckbox-0-test-id).shadow().find([r…...

基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序)
一、系统方案 1、上电初始化液晶第一行显示脉搏,第二行显示温度,第三行显示模式,第四行显示强度;按下K1按键可以选择模式,催眼模式或治疗模式。 2、治疗模块下,可以通过K2、K3修改强度。 二、硬件设计 原理…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
【Java基础】向上转型(Upcasting)和向下转型(Downcasting)
在面向对象编程中,转型(Casting) 是指改变对象的引用类型,主要涉及 继承关系 和 多态。 向上转型(Upcasting) ⬆️ 定义 将 子类对象 赋值给 父类引用(自动完成,无需强制转换&…...

短视频时长预估算法调研
weighted LR o d d s T p 1 − p ( 1 − p ) o d d s T p ( T p o d d s ∗ p ) o d d s p o d d s T o d d s odds \frac{Tp}{1-p} \newline (1-p)odds Tp \newline (Tp odds * p) odds \newline p \frac{odds}{T odds} \newline odds1−pTp(1−p)oddsTp(Tpodds…...