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

双指针-15. 三数之和

文章目录1.题解2.机考代码3.知识点讲解1.res.add(Arrays.asList(nums[i], nums[l], nums[r]));2.Arrays常用方法大厂机考 / 算法题里 Arrays 只需要掌握这 5 个1. Arrays.sort(nums) —— 排序&#xff08;最常用&#xff09;2. Arrays.toString(nums) —— 打印数组3. Arrays.…...

基于西门子S7-1200的换热站PLC与换热器程序,V16及以上博图WinCC画面组态,手自动...

换热站plc程序换热器程序 &#xff08;22&#xff09;采用西门子S7-1200博图WinCC画面组态&#xff0c;博图V16及以上版本都可以仿真运行&#xff0c;无需硬件。 系统带有手动&#xff0f;自动模式&#xff0c;运行数据动态实时显示&#xff0c;带温度实时曲线显示&#xff0c;…...

别再乱配了!华为防火墙+S5700三层交换机组网,这5个坑我帮你踩过了

华为防火墙与S5700三层交换机组网避坑指南&#xff1a;5个致命错误与解决方案 刚接手华为防火墙与S5700三层交换机的组网项目时&#xff0c;我以为按标准模板配置就能万事大吉。直到凌晨三点还在机房排查网络不通的故障&#xff0c;才明白教科书式的配置在实际环境中远远不够。…...

H5扫码功能实战:如何在微信和原生浏览器中实现二维码解析(附完整代码)

H5扫码功能实战&#xff1a;如何在微信和原生浏览器中实现二维码解析 移动互联网时代&#xff0c;二维码已成为连接线上线下最重要的入口之一。作为前端开发者&#xff0c;我们经常需要在H5页面中实现扫码功能&#xff0c;但不同环境下的兼容性问题往往让人头疼。本文将深入探讨…...

COMSOL相场模拟:枝晶生长与雪花形成的模型与教程

comsol相场模拟枝晶生长&#xff08;雪花的形成&#xff09; 有模型和教程 凌晨三点盯着显微镜下的冰晶生长&#xff0c;突然意识到这玩意儿和编程调试一样——参数调不好分分钟给你长歪。相场法模拟枝晶生长这事儿&#xff0c;本质上就是在用数学方程式和物理定律"种&qu…...

亚马逊 API 签名认证机制详解

在调用亚马逊开放平台、亚马逊云服务&#xff08;AWS&#xff09;各类 API 时&#xff0c;签名认证是请求合法的核心门槛&#xff0c;目前主流采用 Signature Version 4&#xff08;SigV4&#xff09; 签名机制。它通过对请求内容与密钥做加密计算&#xff0c;实现身份校验、防…...

如何快速实现单图像3D重建:TripoSR完整实战指南

如何快速实现单图像3D重建&#xff1a;TripoSR完整实战指南 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 想要从一张普通图片快速生成逼真的3D模型吗&#xff1f;TripoSR正是你需要的终极解决方案&#xff01;这个革命性的开源…...

解锁外语游戏新体验:XUnity自动翻译器完全指南 [特殊字符]

解锁外语游戏新体验&#xff1a;XUnity自动翻译器完全指南 &#x1f3ae; 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的生涩文本而苦恼吗&#xff1f;XUnity自动翻译器让你轻松打破语…...

DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?

DB2数据迁移实战&#xff1a;超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时&#xff0c;大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中&#xff0c;数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...

解密GPT:从架构解析到实战应用

1. GPT架构深度拆解 第一次接触GPT模型时&#xff0c;我被它流畅的文本生成能力震撼到了。记得当时用GPT-2生成了一篇伪莎士比亚风格的十四行诗&#xff0c;连文学系的朋友都分不清真假。这种"魔法"背后&#xff0c;其实是精妙的架构设计在支撑。 GPT的核心是Transfo…...