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]:别名。
try 和 except是关键字。
注意关键字后面需要跟英文冒号: 。
注意英文冒号:后面的代码块需要有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的输出结果】

相关文章:
95. Python基础教程:异常处理try...except语句
【目录】 文章目录 1. try...except语法解析2. 程序异常3. except的4种使用方式3.1 单独的except3.2 except 异常名称3.3 except 异常类型 as 别名3.4 except (异常类型1,异常类型2) as 别名 4. 总结 【正文】 1. try…except语法解析 try[traɪ]:尝试。 except[…...
详解rocketMq通信模块升级构想
本文从开发者的角度深入解析了基于netty的通信模块, 并通过简易扩展实现微服务化通信工具雏形, 适合于想要了解netty通信框架的使用案例, 想了解中间件通信模块设计, 以及微服务通信底层架构的同学。希望此文能给大家带来通信模块架构灵感。 概述 网络通信是很常见的需求&#…...
【BOOST程序库】对字符串的处理
基本概念这里不解释了,代码中详细解释了BOOST程序库中对于字符串每一个方法的详细用法: 注意:这里每实践一个方法,都将上面实践过的方法进行了注释,如果全部取消注释,会出现重命名的问题。 #include <…...
(学习笔记-内存管理)虚拟内存
单片机是没有操作系统的,每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的CPU是直接操作内存的[物理地址]。 在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2…...
JVM理论(七)性能监控与调优
概述 性能优化的步骤 性能监控:就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析:通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及GC日志,或者运用命令行工…...
复现YOLOv8改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!
MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…...
LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片
LT6911C 1.描述: LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片,用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出,LT6911C具有可配置的单端口或双端口MIPIDSI/CSI,具有1个高速时钟通道和1个~4个高速数据通道&#…...
vue动态引入静态资源
vue动态引入静态资源 静态资源位置(../../assets/piecture/page404.jpg)或者(/assets/piecture/page404.jpg) 错误引入方式 错误引入方式(一) <template><div><img :src"../../asset…...
perl 强制覆盖拷贝文件
如果你想在Perl中进行文件拷贝时强制覆盖目标文件(如果目标文件已经存在),你可以使用标准模块File::Copy提供的cp函数,它允许你指定是否覆盖目标文件。 以下是一个示例,展示了如何在Perl中进行强制覆盖拷贝文件&#…...
C语言每日一题之整数求二进制1的个数
今天分享一道题目,用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可 以 #include<stdio.h> int num_find_1(unsigned int n) {int count 0;while (n){if (1 n % 2){count;}n / 2…...
AcWing 4443.无限区域
原题链接:AcWing 4443.无限区域 题目来源:夏季每日一题2023 给定一个无限大的二维平面,设点 S 为该平面的中心点。 设经过点 S 的垂直方向的直线为 P,如果直线 P 是一个圆的切线,且切点恰好为点 S,那么&a…...
2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)
文章目录 1. 平移 (Translation)2. 缩放 (Scaling)3. 旋转 (Rotation)4. 错切 (Shearing)5. 镜像 (Reflection) 1. 平移 (Translation)…...
【Rabbitmq】报错:ERROR CachingConnectionFactory Channel shutdown: channel error;
报错内容 ERROR CachingConnectionFactory Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认是自动ack,然后你代码…...
el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?
要在电脑端使用 fixed 固定列,而在移动端不使用,可以使用 CSS 媒体查询结合 Vue 的动态绑定来实现。以下是一个示例代码: <template><el-table><el-table-columnprop"name"label"Name":fixed"isDesk…...
RocketMQ 行业分享
5.0的架构发生了重大调整,添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827...
物联网场景中的边缘计算解决方案有哪些?
在物联网场景中,边缘计算是一种重要的解决方案,用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备,具备边缘计算能力,包括单点公式计算、Python脚本编程以及规则引擎,它为物联网…...
【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标
目录 一、C 学习路线 二、C 课程大纲与学习目标 (1)第一阶段:C 语言基础 (2)第二阶段:C 高级编程 (3)第三阶段:C 核心编程与桌面应用开发 (4…...
【数据结构】实验七:字符串
实验七 字符串实验报告 一、实验目的与要求 1)巩固对串的理解; 2)掌握串的基本操作实现; 3)掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…...
排序算法、
描述 由小到大输出成一行,每个数字后面跟一个空格。 输入 三个整数 输出 输入三个整数,按由小到大的顺序输出。 输入样例 1 2 3 1 输出样例 1 1 2 3 输入样例 2 4 5 2 输出样例 2 2 4 5 代码一(如下)࿱…...
rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard
day04 day04快照快照克隆开机自动挂载ceph文件系统使用MDS对象存储配置服务器端配置客户端访问Dashborad 快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态,可以恢复快照使用镜像、快照综合示例 # 1. 在rbd存…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
