当前位置: 首页 > 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存…...

vue、vuex、vue-router初学导航配合elementui及vscode快捷键

目录 一、vue资源 1.vue知识库汇总 2.vuejs组件 3.Vue.js 组件编码规范 目标 #目录 #基于模块开发...

Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

问题陈述 在信息过载的时代&#xff0c;根据上下文含义和用户意图而不是精确的关键字匹配来查找相关搜索结果已成为一项重大挑战。 传统的搜索引擎通常无法理解用户查询的语义上下文&#xff0c;从而导致相关性较低的结果。 解决方案&#xff1a;ELSER Elastic 通过其检索模型…...

MySQL数据库分库分表备份(shell脚本)

创建目录 mkdir /server/scripts 一、使用脚本实现分库备份 1、创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash ######################################### # File Name:bak_db_v1.sh # Version: V1.0 # Author:Shen QL # Email:17702390000163.co…...

建造者设计模式go实现尝试

文章目录 前言代码结果总结 前言 本文章尝试使用go实现“建造者”。 代码 package mainimport ("fmt" )// 产品1。可以有不同的毫无相关的产品&#xff0c;这里只举一个 type Product1 struct {parts []string }// 产品1逻辑。打印组成产品的部分 func (p *Product…...

创建交互式用户体验:探索JavaScript中的Prompt功能

使用JavaScript中的Prompt功能&#xff1a;创建交互式用户体验 在前端开发中&#xff0c;JavaScript的prompt()函数是一个强大而有用的工具&#xff0c;它可以创建交互式的用户体验。无论是接收用户输入、进行简单的验证还是实现高级的交互功能&#xff0c;prompt()函数都能胜…...

自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 语言模型以文本作为输入&#xff0c;这段文本通常被称为提示&#xff08;Prompt&#xff09;。通常情况下&#xff0c;这不仅仅是一个硬编码的字符串&#xff0c;而是模板、示例和用户输入的组合。LangChain提供了多个…...

OpenPCDet调试出现的问题

Open3d遇到的问题&#xff0c;解决方案 1.ModuleNotFoundError: No module named ‘pcdet’ 原因&#xff1a;没有编译安装pcdet。 解决&#xff1a;进入openpcdet项目根目录&#xff0c;修改setup.py权限&#xff0c;并编译&#xff1a; sudo chmod 777 setup.py python set…...

【业务功能篇58】Springboot + Spring Security 权限管理 【下篇】

4.2.2.3 SpringSecurity工作流程分析 SpringSecurity的原理其实就是一个过滤器链&#xff0c;内部包含了提供各种功能的过滤器。这里我们可以看看入门案例中的过滤器。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjoRRost-1690534711077)(http…...

VBA技术资料MF34:检查Excel自动筛选是否打开

【分享成果&#xff0c;随喜正能量】聪明人&#xff0c;抬人不抬杠&#xff1b;傻子&#xff0c;抬杠不抬人。聪明人&#xff0c;把别人抬得很高&#xff0c;别人高兴、舒服了&#xff0c;看你顺眼了&#xff0c;自然就愿意帮你&#xff01;而傻人呢&#xff1f;不分青红皂白&a…...

spring扩展点

在Spring框架中&#xff0c;有多个扩展点&#xff08;Extension Point&#xff09;可用于自定义和扩展应用程序的行为。这些扩展点允许开发人员介入Spring的生命周期和行为&#xff0c;并提供了灵活性和可定制性。以下是一些常见的Spring扩展点&#xff1a; BeanPostProcessor&…...