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

95. Python基础教程:异常处理try...except语句

【目录】

文章目录

    • 1. try...except语法解析
    • 2. 程序异常
    • 3. except的4种使用方式
      • 3.1 单独的except
      • 3.2 except + 异常名称
      • 3.3 except 异常类型 as 别名
      • 3.4 except (异常类型1,异常类型2) as 别名
    • 4. 总结

【正文】

1. try…except语法解析

try[traɪ]:尝试。

except[ɪkˈsept]:把…排除在外。

try...except语句是Python中的异常处理机制,用于捕获和处理异常。

【作用】

在程序发生异常时执行特定的代码块,以避免程序崩溃或产生不可预料的结果。

【语法】

try:block1
except ExceptionName as alias:block1

block[blɒk]:代码块。

ExceptionName:异常名称。

as:作为,如同。

alias [ˈeɪlɪəs]:别名。

tryexcept是关键字。

注意关键字后面需要跟英文冒号:

注意英文冒号:后面的代码块需要有4个空格的缩进。

【参数说明】

  • block1:表示可能出现错误的代码块。

  • ExceptionName :可选参数,代表用户要捕获的异常名称。

  • as alias可选参数,表示给前面的的异常指定一个别名,alias代表别名。

  • 如果在ExceptionName右侧加上as alias,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

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

【温馨提示】

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

【语法框架1】

try:# 可能会发生异常的代码块
except :# 处理异常类型的代码块(可以是提示性语句)

【语法框架2】

try:# 可能会发生异常的代码块
except 异常名称 :# 处理异常类型的代码块(可以是提示性语句)

【语法框架3】

try:# 可能会发生异常的代码块
except 异常类型 as 别名:# 输出异常的具体内容print(别名)

【语法框架4】

try:# 可能会发生异常的代码块
except (异常类型1,异常类型2,异常类型3) as 别名:# 输出异常的具体内容print(别名) 

可能会发生异常的代码块如果存在多个异常情况时,在except语句后面使用一对英文圆括号( )将可能出现的异常名称括起来,多个异常名称之间使用英文逗号,分隔。

2. 程序异常

编程中程序不能正常运行的原因通常有2种:

  • 一是程序有语法错误。

  • 二是程序语法没有问题,但使用者操作不当或输入的数据不符合要求。

下面这段代码的作用是接收用户输入的两个整数,并输出它们相除得到的结果。

【代码示例】

# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)

【终端输出】

结果为: 0.5

操作者输入正常时,终端显示的结果如下图所示:

在这里插入图片描述

我粗心大意在终端输入时,给第2个整数b输入的值为0,终端显示的结果如下图所示:

在这里插入图片描述

大家注意这段代码是没有语法错误的,报错是因为给变量b赋的值为0。

【报错提示】

File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 5, in <module>
result = a/b
ZeroDivisionError: division by zero

运行代码,程序报 ZeroDivisionError: division by zero 这个错误。

  • line 5表示第5行代码有错误。

  • ZeroDivisionError是一个异常的名称,除数为0时会引发该错误。

  • division by zero表示被零除

ZeroDivisionError是一个Python的异常,用于表示除法运算中出现除数为零的情况。

当我们在程序中执行除法运算时,如果除数为零,就会抛出ZeroDivisionError异常。

这个异常的出现通常是由于代码逻辑错误或者错误的输入导致的。

上面的代码报错就是属于使用者操作不当或输入的数据不符合要求导致的程序异常。

出现这样的报错,我们可以使用Python提供的异常处理机制。

可以用try...except语句捕获出现的异常,让程序继续运行。

except的有4种使用方式,我们依次来看。

3. except的4种使用方式

3.1 单独的except

try的意思是尝试,我们把可能出现异常的代码放到try中,注意try后面有英文冒号:,冒号后有4个空格的缩进。

try :# input接收到的数据为字符串类型,需要用int函数将其转换成整数类a = int (input("请输入第1个整数:"))b = int (input("请输入第2个整数:"))# 计算a除以bresult = a/bprint("结果为:",result)

如果try后面的代码没有问题,则程序正常输出结果。

如果try后面的代码出现异常,则程序执行except后面的代码。

except后面接进行异常处理的代码块。

【代码示例】

try :# input接收到的数据为字符串类型,需要用int函数将其转换成整数类a = int (input("请输入第1个整数:"))b = int (input("请输入第2个整数:"))# 计算a除以bresult = a/bprint("结果为:",result)
except :print("输入有问题,程序不能正常输出结果。")

【终端输出】

在这里插入图片描述

第1种情形是except后面什么参数也不加,回车后跟上一句提示性语句,这句语句你可以结合实际随意编写。

print("输入有问题,程序不能正常输出结果。")该语句是一句提示信息,在这里它就是进行异常处理的代码块。

3.2 except + 异常名称

【代码示例】

try :# input接收到的数据为字符串类型,需要用int函数将其转换成整数类a = int (input("请输入第1个整数:"))b = int (input("请输入第2个整数:"))# 计算a除以bresult = a/bprint("结果为:",result)
except ZeroDivisionError:print("输入有问题,程序不能正常输出结果。")

【终端输出】

在这里插入图片描述

except ZeroDivisionError:

第2种情形是except后面加上ZeroDivisionError

ZeroDivisionError是一个异常名称,编写其它程序时这里需要根据实际情况替换成其它的异常名称。

Python中的异常名称有固定的写法,后面会学。

观察上述2种情况的输出结果,发现有没有异常名称输出的结果都是一样的。

但对于程序员来说有异常名称可以有一个提醒的作用。

3.3 except 异常类型 as 别名

【代码示例】

try :# input接收到的数据为字符串类型,需要用int函数将其转换成整数类a = int (input("请输入第1个整数:"))b = int (input("请输入第2个整数:"))# 计算a除以bresult = a/bprint("结果为:",result)
except ZeroDivisionError as e:print(e)

【终端输出】

在这里插入图片描述

except ZeroDivisionError as e:print(e)
  • except是关键字。

  • ZeroDivisionError是异常名称,这里可以替换成你觉得会发生的异常名称。

  • as是关键字,不能更改。

  • e是别名,它记录了异常的具体内容,这里的e你可以根据你自己的喜好来命名。

  • :注意最后要加英文冒号哦。

  • print(e)输出程序记录的异常内容,根据该内容我们可以排查是什么地方发生了异常。

这里程序记录的异常为division by zero,表示除数为0

看到异常原因我们下次在终端输入的时候不要给除数赋值为0就能避免这个异常。

3.4 except (异常类型1,异常类型2) as 别名

【代码示例】

# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)

除了除数为0的异常,上面的代码还可能有其它的异常。

我因为输入错误,在给b赋值时不小心将0输错成了p,终端输出结果如下图所示:

【终端输出】

在这里插入图片描述

【报错提示】

Traceback (most recent call last):
File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 3, in <module>
b = int (input("请输入第2个整数:"))
ValueError: invalid literal for int() with base 10: 'p'

运行上面的代码,程序报 ValueError: invalid literal for int() with base 10: 'p' 这个错误。

  • line 3表示第3行有语法错误。

  • ValueError是一个异常的名称,表示传入的值错误。

  • invalid literal for int() with base 10: 'p'表示用户输入的字符串是’p’,而int()函数无法将这个字符串解析为一个有效的整数。

invalid[ɪnˈvælɪd]:无效的。

literal [ˈlɪtərəl]:文本,常量。

base [beɪs]:基础。

invalid literal for int() with base 10: 'p'逐次翻译为使用十进制基数将字符串'p'转换为整数时出现无效的字面值

invalid literal for int() with base 10: 'p'这个错误是由于我尝试将一个非数字字符转换为整数而引发的。

在Python中,int()函数用于将字符串转换为整数。

然而,当你尝试将一个无法转换为整数的字符串(如字母)传递给int()函数时,就会出现这个错误。

b=0的时候,程序出现ZeroDivisionError异常。

b=p的时候,程序出现ValueError异常。

我们发现同样的代码,可能存在多个异常。

在捕获异常时,如果需要同时处理多个异常我们可以采用下面的代码实现:

【代码示例】

try :# input接收到的数据为字符串类型,需要用int函数将其转换成整数类a = int (input("请输入第1个整数:"))b = int (input("请输入第2个整数:"))# 计算a除以bresult = a/bprint("结果为:",result)
except (ZeroDivisionError,ValueError) as e:print(e)

【程序存在2个异常情况】

except (ZeroDivisionError,ValueError) as e:print(e)

上面的程序可以捕获2个异常。

b=0的时候,程序捕获了ZeroDivisionError异常,输出division by zero

b=p的时候,程序捕获了ValueError异常,输出invalid literal for int() with base 10: 'p'

【b=0,程序抛出ZeroDivisionError异常】

在这里插入图片描述

【b=w,程序抛出ValueError异常】

在这里插入图片描述

4. 总结

【语法总结】

try:# 可能会发生异常的代码块# 1. 单独的except
except :print("输入有问题,程序不能正常输出结果。")# 2. except+异常名称
except ZeroDivisionError:print("输入有问题,程序不能正常输出结果。")# 3. except 异常名称 as 别名
except ZeroDivisionError as e:print(e)  # 4. except (异常名称1, 异常名称1) as 别名
except (ZeroDivisionError,ValueError) as e:print(e)

【没有try...except语句的输出结果】

在这里插入图片描述

【有try...except语句的输出结果】

在这里插入图片描述

【except语句中没有as的输出结果】

在这里插入图片描述

【except语句中有as的输出结果】

在这里插入图片描述

http://www.lryc.cn/news/99161.html

相关文章:

  • 详解rocketMq通信模块升级构想
  • 【BOOST程序库】对字符串的处理
  • (学习笔记-内存管理)虚拟内存
  • JVM理论(七)性能监控与调优
  • 复现YOLOv8改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!
  • LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片
  • vue动态引入静态资源
  • perl 强制覆盖拷贝文件
  • C语言每日一题之整数求二进制1的个数
  • AcWing 4443.无限区域
  • 2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)
  • 【Rabbitmq】报错:ERROR CachingConnectionFactory Channel shutdown: channel error;
  • el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?
  • RocketMQ 行业分享
  • 物联网场景中的边缘计算解决方案有哪些?
  • 【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标
  • 【数据结构】实验七:字符串
  • 排序算法、
  • rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard
  • vue、vuex、vue-router初学导航配合elementui及vscode快捷键
  • Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR
  • MySQL数据库分库分表备份(shell脚本)
  • 建造者设计模式go实现尝试
  • 创建交互式用户体验:探索JavaScript中的Prompt功能
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:基础知识]
  • OpenPCDet调试出现的问题
  • 【业务功能篇58】Springboot + Spring Security 权限管理 【下篇】
  • VBA技术资料MF34:检查Excel自动筛选是否打开
  • spring扩展点
  • Skin Shader 使用自动生成的Thickness