当前位置: 首页 > 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的输出结果】

在这里插入图片描述

相关文章:

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ɪ]&#xff1a;尝试。 except[…...

详解rocketMq通信模块升级构想

本文从开发者的角度深入解析了基于netty的通信模块, 并通过简易扩展实现微服务化通信工具雏形, 适合于想要了解netty通信框架的使用案例, 想了解中间件通信模块设计, 以及微服务通信底层架构的同学。希望此文能给大家带来通信模块架构灵感。 概述 网络通信是很常见的需求&#…...

【BOOST程序库】对字符串的处理

基本概念这里不解释了&#xff0c;代码中详细解释了BOOST程序库中对于字符串每一个方法的详细用法&#xff1a; 注意&#xff1a;这里每实践一个方法&#xff0c;都将上面实践过的方法进行了注释&#xff0c;如果全部取消注释&#xff0c;会出现重命名的问题。 #include <…...

(学习笔记-内存管理)虚拟内存

单片机是没有操作系统的&#xff0c;每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。另外&#xff0c;单片机的CPU是直接操作内存的[物理地址]。 在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2…...

JVM理论(七)性能监控与调优

概述 性能优化的步骤 性能监控&#xff1a;就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析&#xff1a;通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及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.描述&#xff1a; LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片&#xff0c;用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出&#xff0c;LT6911C具有可配置的单端口或双端口MIPIDSI/CSI&#xff0c;具有1个高速时钟通道和1个~4个高速数据通道&#…...

vue动态引入静态资源

vue动态引入静态资源 静态资源位置&#xff08;../../assets/piecture/page404.jpg&#xff09;或者&#xff08;/assets/piecture/page404.jpg&#xff09; 错误引入方式 错误引入方式&#xff08;一&#xff09; <template><div><img :src"../../asset…...

perl 强制覆盖拷贝文件

如果你想在Perl中进行文件拷贝时强制覆盖目标文件&#xff08;如果目标文件已经存在&#xff09;&#xff0c;你可以使用标准模块File::Copy提供的cp函数&#xff0c;它允许你指定是否覆盖目标文件。 以下是一个示例&#xff0c;展示了如何在Perl中进行强制覆盖拷贝文件&#…...

C语言每日一题之整数求二进制1的个数

今天分享一道题目&#xff0c;用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字&#xff0c;那我们的二进制也可 以 #include<stdio.h> int num_find_1(unsigned int n) {int count 0;while (n){if (1 n % 2){count;}n / 2…...

AcWing 4443.无限区域

原题链接&#xff1a;AcWing 4443.无限区域 题目来源&#xff1a;夏季每日一题2023 给定一个无限大的二维平面&#xff0c;设点 S 为该平面的中心点。 设经过点 S 的垂直方向的直线为 P&#xff0c;如果直线 P 是一个圆的切线&#xff0c;且切点恰好为点 S&#xff0c;那么&a…...

2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

文章目录 1. 平移 &#xff08;Translation&#xff09;2. 缩放 &#xff08;Scaling&#xff09;3. 旋转 &#xff08;Rotation&#xff09;4. 错切 &#xff08;Shearing&#xff09;5. 镜像 &#xff08;Reflection&#xff09; 1. 平移 &#xff08;Translation&#xff09…...

【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&#xff0c;然后你代码…...

el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?

要在电脑端使用 fixed 固定列&#xff0c;而在移动端不使用&#xff0c;可以使用 CSS 媒体查询结合 Vue 的动态绑定来实现。以下是一个示例代码&#xff1a; <template><el-table><el-table-columnprop"name"label"Name":fixed"isDesk…...

RocketMQ 行业分享

5.0的架构发生了重大调整&#xff0c;添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827...

物联网场景中的边缘计算解决方案有哪些?

在物联网场景中&#xff0c;边缘计算是一种重要的解决方案&#xff0c;用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备&#xff0c;具备边缘计算能力&#xff0c;包括单点公式计算、Python脚本编程以及规则引擎&#xff0c;它为物联网…...

【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标

目录 一、C 学习路线 二、C 课程大纲与学习目标 &#xff08;1&#xff09;第一阶段&#xff1a;C 语言基础 &#xff08;2&#xff09;第二阶段&#xff1a;C 高级编程 &#xff08;3&#xff09;第三阶段&#xff1a;C 核心编程与桌面应用开发 &#xff08;4&#xf…...

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…...

排序算法、

描述 由小到大输出成一行&#xff0c;每个数字后面跟一个空格。 输入 三个整数 输出 输入三个整数&#xff0c;按由小到大的顺序输出。 输入样例 1 2 3 1 输出样例 1 1 2 3 输入样例 2 4 5 2 输出样例 2 2 4 5 代码一&#xff08;如下&#xff09;&#xff1…...

rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard

day04 day04快照快照克隆开机自动挂载ceph文件系统使用MDS对象存储配置服务器端配置客户端访问Dashborad 快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态&#xff0c;可以恢复快照使用镜像、快照综合示例 # 1. 在rbd存…...

PA100K数据集实战:从下载到结构化解析全流程

1. PA100K数据集初探&#xff1a;为什么选择它&#xff1f;如果你正在研究行人属性识别&#xff0c;PA100K绝对是个绕不开的宝藏数据集。这个数据集包含了10万张真实监控场景下的行人图像&#xff0c;每张图都标注了26种常见属性——从衣着风格&#xff08;比如是否穿T恤、裙子…...

环境光遮蔽(Ambient Occlusion):揭秘那个让虚拟世界“有重量感“的阴影魔法

一、一个让我"开窍"的老木匠故事 我有个朋友是传统家具的修复师&#xff0c;他给我讲过一个让我至今难忘的故事。他说他刚入行时跟着一位 70 多岁的老木匠师父学习——师父让他做的第一件事不是雕花、不是榫卯——而是"看阴影"——这个看似奇怪的训练改变了…...

Python 3.7 + XGBoost 多分类实战:从数据清洗到SHAP模型解释的保姆级教程

Python 3.7 XGBoost 多分类实战&#xff1a;从数据清洗到SHAP模型解释的保姆级教程在机器学习领域&#xff0c;XGBoost因其出色的性能和可解释性成为众多数据科学家的首选工具。本文将带您完整走过多分类任务的全流程&#xff0c;从原始数据到可解释的预测模型&#xff0c;每个…...

iPaaS 应用场景深度解析:从系统孤岛到数据自由流动的六大实战路径

写在前面 一个企业的数字化程度越高&#xff0c;系统就越多。系统越多&#xff0c;集成问题就越严重。 这不是假设&#xff0c;而是我们在服务客户过程中反复验证的结论——企业数字化转型的瓶颈&#xff0c;往往不在于"造新系统"&#xff0c;而在于"连老系统&q…...

3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流

3步解锁专业级MMD创作&#xff1a;Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...

转行网络安全运维:从0到1的可落地指南

转行网络安全运维&#xff1a;从0到1的可落地指南 一、 「3个核心技能&#xff1a;从零起步也能会」 网上学习资料多到爆炸&#xff0c;不用纠结“哪个最好”&#xff0c;记住一句话&#xff1a;**能学会、能上手的就是好的**&#xff01;不管是免费视频还是付费课&#xff0c…...

厨房空调技术白皮书:从风冷到水冷,制冷系统在厨房场景中的工程化演进

厨房空调是暖通行业近三年技术迭代最密集的细分品类。从最初的"凉霸"&#xff08;本质是风扇&#xff09;&#xff0c;到风冷分体式&#xff0c;再到水冷一体式&#xff0c;每代技术都在解决上一代没有覆盖的用户痛点。本文以工程技术视角&#xff0c;梳理四代厨房制…...

解密高校教师必会的Gemini 3.1 Pro五大科研隐藏技能:从论文评估到创新点锁定

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。 科研路上,有人发完顶刊顺利晋升,有人还在为创新点抓耳挠腮。 大多数教…...

终极键盘重映射解决方案:3分钟实现职业级游戏操作精度

终极键盘重映射解决方案&#xff1a;3分钟实现职业级游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对抗中&#xff0c;你是否曾因键盘按键冲突而错失关键操作&#xff1f;当同时按下…...

简单学习 --> SSE

我们使用AI时&#xff0c;AI对我们说的话不会一次性把全部内容弹出来&#xff0c;而是会像流水一样&#xff0c;一点点吐出来&#xff0c;那么这种丝滑的交互体验&#xff0c;背后的核心就是 SSE (Server-Sent Events)。 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent …...