Python编程技巧 – 异常处理

Python编程技巧 – 异常处理

Python Programming Skills – Exception Handling

By Jackson@ML

每一个程序都未必是健壮的,有时候很脆弱。只有在人的理想思维状况下,返回的结果才是正确的,如意的。

1. 错误发生及异常输出

面对种种编写有疏漏的程序,常常会出现错误,下面举出不同的例子,来看会出现哪些问题。
1) 例如,print()语句执行时,缺少了括号,如下代码:

print "Hello, world!"File "<stdin>", line 1print "Hello, world!"^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

提示Syntax Error(即:语法错误)。

通过以下的例子,可以看到其它异常。除数等于零时,被除数除以它就会报错。

 x = 5 / 0
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

还有一个例子:

lst = [1, 2, 3]
print(lst[3])Traceback (most recent call last):File "<stdin>", line 1, in <module>
IndexError: list index out of range

仍有一个例子:

d = {'a': 'hello'}
d['b']Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: 'b'

提示KeyError,即字典对象的键 ‘b’不存在,导致异常。

我们注意到相关异常的名字都有个共同点,即以Error结尾。在Python编程语言中,error和exception几乎是可以交换使用的。但是,往往错误比异常更加严重。

前述相关的例子中所有的错误类都继承自Exception。

2. 抛出异常

有了异常,就需要着手处理。做项目过程中,实际探究一下Python程序需要通知用户或调用输入不合法的函数,那该如何处理?

先来看以下这个类,用来添加偶数到列表中。

class EvenOnly (list):def append(self, integer):if not isinstance (integer, int):raise TypeError ("Only integers can be added to lists")if integer % 2:raise ValueError ("Only even numbers can be added to lists")super().append(integer)        
e = EvenOnly()
e.append("a string")

在Visual Studio Code中执行,结果如下图所示:

在这里插入图片描述

出现TypeError类型错误!,意思是只有整数能够添加,而字符串“a string”违背了这一原则,因此报错。

修改最后一个语句为:

e.append(3)

执行结果如下图所示:
在这里插入图片描述

这次出现了不一样的报错,即ValueError,属于数值错误,提示仅有偶数可以被添加;由于整数3是奇数,并不是偶数,因此报错。

3. 异常作用

像上述的例子,都属于程序抛出了异常,看起来似乎立即停止了程序运行。这是正常的流程,即抛出异常后,所有代码都不会继续被执行,而是停止,除非处理了异常。

接下来,看一个无返回值的函数,按照这个逻辑来写这个函数,其中,使用Raise抛出一个明确的异常(提醒用户发生了什么):

def novalue_return():print("I am going to raise an exception")raise Exception("Raised Exception!")print("This will never execute.")return "No value returned."
novalue_return()

执行结果如下图所示:
在这里插入图片描述
这次,抛出了程序设定的异常,即Exception: Raised Exception! 尽管看起来不是特别详尽,但是这个异常可以自己随意设定。

如果了解到程序有可能抛出最接近的类别的异常,那么输出的异常字符串就能更好更精确地指导程序完善过程,使得代码精进成为可能。

4. 异常处理

异常发现了,也能够自行设定抛出了。那么,当遇到一个异常情况,代码应该如何应对或者从中恢复呢?我们需要恰当的异常处理方法。

使用 try…except 语句块包裹可能抛出的异常的代码,就是不错的选择。修改上述代码如下操作:

def novalue_return():print("I am going to raise an exception")raise Exception("Raised Exception!")print("This will never execute.")return "No value returned."
try:novalue_return()
except:print("An exception was caught!")
print("This will be executed after the exception")

可以看到,在原本需要直接执行的novalue_return()语句,被try … except块包裹,完成后再打印一个语句说明在异常之后执行。

执行该程序如下图所示:

在这里插入图片描述
显而易见,在程序执行中,按照我设定的步骤,由于发生了异常,则执行except块,打印输出An exception was caught!(一个异常被捕获);最后,打印常规语句,说明在异常之后执行。

一旦捕获异常,那么就能够进行代码的善后清理,并且继续执行代码,而不受异常函数的影响。

抛出异常后,novalue_return()函数的剩余代码仍然不会执行,但是调用这个函数的代码能够恢复,并且继续执行。

本文简述了异常的基本机制,异常的出现,如何抛出以及处理异常。感谢您的阅读。


技术好文陆续推出,敬请关注。

喜欢就点赞哈!您的认可,我的动力。😊

相关阅读:

  1. Python编程技巧 - 迭代器(Iterator)
  2. Python编程技巧 - Lambda函数
  3. Python编程技巧 - 使用字典
  4. Python编程技巧 - 使用字符串
  5. Python编程技巧 - 对象和类
  6. Python编程技巧 - 使用列表(List)
  7. Python编程技巧 - 转换二进制、八进制和十六进制的函数
  8. Python编程技巧 - 函数入门
  9. 安装最新版Visual Studio Code来开发Python应用程序
  10. 2023最新版Python 3.12.0安装使用指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PR剪辑视频做自媒体添加字幕快速方式(简单好用的pr视频字幕模板)

如何选择合适的字幕添加进短视频呢&#xff1f;首先要先确定增加的视频风格&#xff0c;简约、商务、科技感、炫酷&#xff1b;再确定用途&#xff0c;注释、标记、语音翻译、引用、介绍&#xff1b;最后在相应的模板中挑选几个尝试&#xff0c;悬着一个最切合主题的使用&#…

推荐的国外自动控制原理优秀教材:现代控制系统

推荐国外著名高等院校信息科学与技术优秀教材《现代控制系统》&#xff08;Modern Control Systems&#xff09;&#xff0c;全书930页。自动控制原理课程教程,控制系统基础教材,涵盖控制工程方法,大量例题详细演示设计流程,电子版教学PPT和教学辅导手册供师生使用。 现代控制…

23、文件上传漏洞——Web容器及IIS

文章目录 一、常见web容器1.1 名词解释1.2 什么是web容器 二、IIS简介2.1 什么是IIS2.2 什么是文件解析 三、IIS6.0 文件解析漏洞3.1 漏洞利用 一、常见web容器 1.1 名词解释 服务器&#xff1a;一种管理资源并为用户提供服务的计算机。 web服务器&#xff0c;即www服务器或h…

C语言三种循环输出9*9乘法表

解题思路&#xff1a; 1、外层循环控制1~9循环 2、内层控制循环的次数 比如&#xff1a; 1 * 1 1 循环一次 1 * 1 1 1 * 2 循环两次 依此类推 int i, j;printf("for 打印9*9乘法表\r\n");for(i 1; i <10; i) {for(j 1; j < i;j) {printf("%d * %d %d…

QT----自定义信号和槽

第二天 2.1自定义信号和槽 新建一个Qtclass 自定义信号&#xff1a;返回值是void &#xff0c;只需要声明&#xff0c;不需要实现&#xff0c;可以有参数&#xff0c;可以重载 自定义槽&#xff1a;返回值void &#xff0c;需要声明&#xff0c;也需要实现&#xff0c;可以有…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

如何处理3dmax渲染完成后阴影部分?

使用3dmax软件&#xff0c;对效果图进行渲染过程中&#xff0c;有不少小伙伴&#xff0c;在渲染完成后出现问题。 较为常见的3dmax渲染问题有3dmax渲染有阴影&#xff1f; 对于一些新手伙伴遇到这类问题&#xff0c;不知如何解决&#xff0c;就会苦恼3dmax渲染有阴影怎么办&am…

【实战oj题】——相同的树及二叉树的最大深度

前言&#xff1a;二叉树是我们数据结构中一个比较重要的内容&#xff0c;它的oj题自然也就很多类型&#xff0c;那么我们今天就来解决二叉树中的oj题——相同的树。 这个题我们就得分情况了&#xff0c;如果两个树的根节点都为空的话&#xff0c;那么两棵树就会相等&#xff0c…

西南科技大学C++程序设计实验十一(泛型程序设计与C++标准模板库)

一、实验目的 1. 掌握泛型程序设计概念; 2. 掌握vector、deque、list容器使用方法; 3.了解set、map容器使用方法。 二、实验任务 1.分析完善以下程序,理解vector容器使用方法: #include <iostream> __#include <vector>_______ //补充vector模板头文件 …

【开源】基于Vue.js的学生综合素质评价系统

文末获取源码&#xff0c;项目编号&#xff1a; S 086 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S086。} 文末获取源码&#xff0c;项目编号&#xff1a;S086。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能…

YB4052 充满电压可调SOT23有防反接功能的线性锂离子电池充电芯片

YB4052 充满电压可调SOT23有防反接功能的线性锂离子电池充电芯片 描述&#xff1a; YB4052是一款完整的单节钾高子申池采用恒定申流恒定申乐线件充电器。其S0T封装与较少的外部元件数目使得B4052成为便携式应用的理想洗择。YB4052可以话合SB申源和活配器电源工作。由于采用了…

深度解读 | 搭载谷歌最强大模型Gemini的Bard能否赶上ChatGPT

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 昨天早上看到了相关的报道&#xff0c;谷歌昨天发布了 "号称最强的大模型" Gemini&#xff0c;还是熟悉的字眼、还是熟悉的配方。之前谷歌一直在 AIGC 的竞争相…

CentOS或RHEL安装code-server(vscode-web)

下载rpm安装包 网络下载或者下载到本地再上传到服务器&#xff0c;点击访问国内下载地址&#xff0c;不需要积分curl -fOL https://github.com/coder/code-server/releases/download/v4.19.1/code-server-4.19.1-amd64.rpm安装 rpm -i code-server-4.19.1-amd64.rpm关闭和禁用…

OpenCV-Python:随机数与随机颜色

目录 Python中随机数 OpenCV-Python随机数 随机颜色的生成 随机噪声生成 代码练习与测试 知识笔记 Python中随机数 在Python中&#xff0c;我们可以使用random模块来生成随机数。random模块提供了一系列的函数来生成不同类型的随机数。以下是一些常用的随机数生成函数&…

案例精选|聚铭网络助力莱阳市人民医院打造合规性网络安全保障体系

莱阳市人民医院是一所集医疗、教学、科研、急救、康复、医养结合于一体的大型二级甲等综合性公立医院&#xff0c;占地总面积约3万平方米&#xff0c;建筑面积约7万平方米&#xff0c;设置科室48个&#xff0c;开放床位500张。医院先后获得山东省首批医养结合典型、山东省卒中防…

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组(样卷)

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组&#xff08;样卷&#xff09; 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 …

MySQL数据库从小白到入门(二)

多表关系&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种。 外键&#xff1a; 创…

批量AI人工智能写作软件下载【2024最新】

在当今数字化的浪潮中&#xff0c;人工智能技术为各行各业带来了颠覆性的变革。其中&#xff0c;AI在文案创作领域的应用尤为引人瞩目&#xff0c;而批量AI人工智能写作更是成为文案创作者们关注的热点。本文将深入探讨批量AI人工智能写作的概念、其在不同领域的应用&#xff0…

【Flink系列二】如何计算Job并行度及slots数量

接上文的问题 并行的任务&#xff0c;需要占用多少slot &#xff1f;一个流处理程序&#xff0c;需要包含多少个任务 首先明确一下概念 slot&#xff1a;TM上分配资源的最小单元&#xff0c;它代表的是资源&#xff08;比如1G内存&#xff0c;而非线程的概念&#xff0c;好多…

Uniapp - 环境搭建 vscode开发

uni-app 基础 创建 uni-app 项目方式 uni-app 支持两种方式创建项目&#xff1a; 通过 HBuilderX 创建&#xff08;需安装 HBuilderX 编辑器&#xff09; 通过命令行创建&#xff08;需安装 NodeJS 环境&#xff09; HBuilderX 创建 uni-app 项目 创建步骤 1.下载安装 H…