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存…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
