Python之异常处理语句

article/2025/10/8 4:30:35

Python之异常处理语句

  • 一、前言
  • 二、try…except 语句
  • 三、try…except…else 语句
  • 四、try…except…finally 语句
  • 五、使用raise 语句抛出异常


一、前言

  在程序开发时,有些错误并不是每次运行都会出现。只要输入的数据符合程序的要求,程序就可以正常运行;但如果输入的不符合程序要求,就会抛出异常并停止运行。这时,就需要在开发程序时对可能出现异常的情况进行处理。下面将详细介绍Python中提供的异常处理语句。


二、try…except 语句

  在Python中,提供了try…except语句捕获异常。在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误,就会执行except语句块中的代码,如果try语句块中的代码没有报错,那么except语句块将不会执行。具体语法格式如下:

try:block1
except [ExceptionName [as alias]]:block2

  参数说明:

  • block1:表示可能出现错误的代码块 。
  • ExceptionName [as alias]:可选参数,用于指定要捕获的异常。其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上“as alias”,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

说明 :在使用try…except语句捕获异常时,如果except后面不指定异常名称,则表示捕获全部异常。

  • block2:表示进行异常处理的代码块。在这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。

说明 :使用try…except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。

  例如,在执行除法运算时,对可能出现的异常进行处理,代码如下:

def division():num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录num2 = int(input("请输入除数:"))result = num1 // num2  # 执行除法运算print(result)if __name__ == "__main__":try:  # 捕获异常division()  # 调用函数except ZeroDivisionError:  # 处理异常print("输入错误:除数不能为0")  # 输出错误原因

三、try…except…else 语句

  在Python中,还有另外一种异常处理结构,它是try…except…else 语句,也就是在原来try…except语句的基础上再添加一个else句子,用于指定当try语句模块中没有出现异常时要执行的语句块。该语句块中的内容在try语句中发现异常时,将不被执行。例如,在执行除法运算时,实现当division()函数执行时没有抛出异常时,输出文字“程序执行完毕……”,代码如下:

def division():num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录num2 = int(input("请输入除数:"))result = num1 // num2  # 执行除法运算print(result)if __name__ == "__main__":try:  # 捕获异常division()  # 调用函数except ZeroDivisionError:  # 处理异常print("\n错误了:除数不能为0")  # 输出错误原因except ValueError as e:  # 处理ValueError异常print("输入错误", e)  # 输出错误原因else:print("程序执行完成……")  # 没有异常时执行

  执行上面代码,将显示如下图所示:

在这里插入图片描述


四、try…except…finally 语句

  完整的异常处理语句应包含finally代码模块,通常情况下,无论程序中有无异常产生,finally代码块中的代码都会被执行。基本格式如下:

try:block1
except [ExceptionName [as alias]]:block2
finally:block3

  对于try…except…finally 语句的理解并不复杂,它只是比try…except语句多了一个finally代码快,如果程序中有一些在任何情况中都必须执行的代码,那么就可以将它们放在finally语句的区块中。

说明 :使用except句子是为了允许处理异常。无论是否引发了异常,使用finally子句都可以执行。如果分配了有限的资源(如打开文件),则应该将释放资源的代码放置在finally语句的区块中。

  例如,在执行除法运算时,实现当division()函数在执行时无论是否抛出异常,都输出文字“释放资源,并关闭”。修改后的代码如下:

def division():num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录num2 = int(input("请输入除数:"))result = num1 // num2  # 执行除法运算print(result)if __name__ == "__main__":try:  # 捕获异常division()  # 调用函数except ZeroDivisionError:  # 处理异常print("\n错误了:除数不能为0")  # 输出错误原因except ValueError as e:  # 处理ValueError异常print("输入错误", e)  # 输出错误原因else:print("程序执行完成……")  # 没有异常时执行finally:  # 无论是否抛出异常都执行print("释放资源,并关闭")

  执行代码,将显示如下图所示:

在这里插入图片描述
  至此,已经介绍了异常处理语句的try…except、try…except…else 、try…except…finally等形式。下面通过下图说明异常处理的各个句子的执行关系。

在这里插入图片描述


五、使用raise 语句抛出异常

  如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise 语句在函数或方法中抛出异常。raise语句的基本格式如下:

raise [ExceptionName[(reason)]]

  其中,ExceptionName[(reason)]为可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。如果省略,就会把当前信息的错误原样抛出。

说明 :ExceptionName[(reason)]参数中的(reason)也可以省略,如果省略,则在抛出异常时,不附带任何描述信息。

  例如,在执行除法运算时,在division()函数中实现,当除数为0时,应用raise语句抛出一个ValueError异常,接下来在最后一行语句的下方添加except语句处理ValueError异常,代码如下:

def division():num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录num2 = int(input("请输入除数:"))if num2 == 0:raise ValueError("除数不能为0")result = num1 // num2  # 执行除法运算print(result)if __name__ == "__main__":try:  # 捕获异常division()  # 调用函数except ZeroDivisionError:  # 处理异常print("\n错误了:除数不能为0")  # 输出错误原因except ValueError as e:  # 处理ValueError异常print("输入错误", e)  # 输出错误原因else:print("程序执行完成……")  # 没有异常时执行finally:  # 无论是否抛出异常都执行print("释放资源,并关闭")


http://chatgpt.dhexx.cn/article/3yljMPT8.shtml

相关文章

python自定义异常和主动抛出异常(raise)

前言 有时候python自带异常不够用,如同java,python也可以自定义异常,并且可以手动抛出。注意,自定义异常只能由自己抛出。python解释器是不知道用户自定义异常是什么鬼的。 raise语句 主动抛出异常。 格式: 主动抛…

Python 异常处理

python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 异常处理: 本站Python教程会具体介绍。断言(Assertions):本站Python教程会具体介绍。 python标准异常 异常名称描述BaseException所有异常的基类SystemExit解释…

python中断程序执行(不抛出异常)

文章目录 1. quit()2. exit()3. sys.exit([arg])4. os._exit(n) 函数quit(),exit(),sys.exit()和os._exit()具有几乎相同的功能,都能引发SystemEx…

python抛出异常及异常传递

抛出异常: Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句和assert语句主动抛出。 使用raise语句抛出异常: 1.使用异常类引发异常 格式如下: raise 异常类 #格式1:使用异常类名引发指定的异…

Python异常处理

1异常情况: 我们在调试代码到时候会出现错误,例如用户输入非法数值,程序就会报错、停止。为避免这种情况,我们学习异常语句 计算平方根运算,如果我们输入的不是整数,是带字符串,会报错。如果我们加上 try:…

Python面向对象——异常的抛出及处理方法

1 异常的概念 Python解释器在运行时遇到错误,该错误会终止正在运行的程序并在控制台输出一些错误信息,这便是异常 程序停止执行并提示错误这个动作我们称之为: 抛出异常 异常的引起并不全是由于代码不符合Python语法规范所造成的,不恰当的用…

Command failed:C:Windows\system32\cmd. exe /s/c autoreconf -ivf

在运行npm i时: npm i 出现以下报错: 看网上很多答案都是说缺包,要手动加,但这个解决办法并不适用我,后面看到解答是代理的问题,导致包下不下来,所以可以取消代理或者变更代理来试试 npm con…

了解automake和autoconf(autoreconf)

本文转载自《例解 autoconf 和 automake 生成 Makefile 文件》 通过这篇文章可以了解auotmake和autoconf的基本工作流程,文章讲的通俗易懂,但是版本较老。了解新版本的automake可以参考automake的WiKi主页Automake,通过下图可以很清晰的了解a…

autoreconf: command not found解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Linux下监测网卡状态

目录 1.说明 2.解析命令法: 2.1.CODE 2.2.TEST 3.SOCKET法 1.说明 此代码主要对Linux下网卡4种状态进行检测,可以检查: 网卡是否存在;网卡是否down;网卡UP,插了网线(RUNNING);网卡UP&…

如何查询linux服务器的网卡,linux怎么查看网卡硬件信息

你们知道怎么查看电脑中的网卡型号吗?下面是学习啦小编带来的关于linux怎么查看网卡硬件信息的内容,欢迎阅读! Linux查看网卡信息方法一: 1.lspci | grep -i ethernet [rootlocalhost ~]# lspci | grep -i ethernet 01:00.0 Ethernet controller: Broad…

Linux网卡状态查看

博文背景 想知道ip a命令的输出都是什么意思,过于简单的如mtu、mac地址和广播地址我就不解释了 具体操作 重要文档 https://baturin.org/docs/iproute2/ http://web.archive.org/web/20220807073512/http://www.policyrouting.org/iproute2.doc.html https://lar…

SimpleDateFormat类 格式化日期

功能:格式化和解析日期 将Date类型的日期格式化成我们需要的日期类型一般是 字符串类型将字符串类的日期再转回来。 用到两个方法 format(Date date) : 将date型转换成特定格式的字符串 parse(String str) : 将字符串str转换成特定格式的dat…

php如何格式化日期格式,PHP如何格式化日期? 涨知识了

在做php开发时,经常会用到日期函数,我们可以通过这个函数将日期格式化输出显示。日期有多种的显示格式,这些格式在PHP里怎么格式化?下面一起来看下。 操作方法 01 先看下我们的代码,如图,在php里要获取到当…

Oracle格式化日期

将oralce中时间格式为XXX年XX月XX日,如下图: 需要给年月日添加引号,如to_char(sysdate,yyyy"年"mm"月"dd"日" ); select to_char(sysdate,yyyy"年"mm"月"dd"日") from dual;

微信小程序下拉菜单功能的实现

页面wxml代码如下&#xff1a; <!-- 下拉菜单栏 --><view classlist><ul class"font_s30"><li bindtap"getNav" data-idarea style"color:{{c_area}}"><view><span class "l_name" id"area&qu…

微信小程序-自定义下拉框组件

知识点&#xff1a;组件&#xff0c;animation&#xff0c;获取当前点击元素的索引与内容 微信小程序中没有select下拉选项框&#xff0c;所以只有自定义。自定义的话&#xff0c;可以选择模板的方式&#xff0c;也可以选择组件的方式来创建。 这次我选择了组件&#xff0c;这…

微信小程序下拉菜单组件实现

先看需求和效果&#xff0c;移动端设计比较常用的下拉菜单&#xff0c;主要用于筛选查询列表结果。下拉菜单的样式可以根据自己的具体需求进行修改。这里根据自己的实际需求开发了三种下拉类型&#xff1a; 效果展示 第一个是单选下拉菜单&#xff0c;单选之后立即收起。 第…

微信小程序 实现从顶部弹出的下拉框

效果图&#xff1a; 我尝试了微信提供的API wx.animation去实现这个功能&#xff0c;但很是麻烦&#xff0c;而且对于我这刚接触小程序的渣渣而言&#xff0c;实现起来也很是困难。所以我换了种方法&#xff0c;采用CSS的动画去实现。 wxml: <image classfabiao src../ico…

微信小程序下拉菜单实例

微信小程序下拉菜单思路与步骤&#xff1a; 布局方面&#xff0c;整体使用dl来写&#xff0c;二级包在dd中&#xff0c;用ul li来写&#xff1b;交互方面&#xff0c;点击某一级菜单&#xff0c;关闭兄弟子菜单&#xff0c;点击某子菜单关闭所有菜单。 1.使用dt做出第一级菜单 …