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.rhkb.cn/news/212691.html

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

相关文章

在JSP项目中编写一个接口返回JSON 供JSP界面异步请求数据

首先 我们要引入json处理的依赖工具 在 pom.xml文件的 dependency 标签中加入如下代码 <dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1.1</version> </dependenc…

刷题记录--算法--简单

第一题 2582. 递枕头 已解答 简单 相关标签 相关企业 提示 n 个人站成一排&#xff0c;按从 1 到 n 编号。 最初&#xff0c;排在队首的第一个人拿着一个枕头。每秒钟&#xff0c;拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾&#xff0c;传递…

CSS中 设置文字下划线 的几种方法

在网页设计和开发中&#xff0c;我们经常需要对文字进行样式设置&#xff0c;包括字体,颜色&#xff0c;大小等&#xff0c;其中&#xff0c;设置文字下划线是一种常见需求 一 、CSS种使用 text-decoration 属性来设置文字的装饰效果&#xff0c;包括下划线。 常用的取值&…

【Python系列】Python函数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施&#xff0c;及国民经济数字化转型&#xff0c;叠加驱动信息化行业加速发展的大形势下&#xff0c;以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…

怎么隐藏电脑文件夹?文件夹隐藏方法盘点

隐藏文件夹可以有效地提高文件夹的安全性&#xff0c;避免其他人获取文件夹重要数据。那么&#xff0c;该怎么隐藏电脑文件夹呢&#xff1f;下面我们就一起来盘点一下文件夹隐藏的方法。 文件夹属性隐藏 Windows系统提供了文件夹隐藏功能&#xff0c;我们只需要在文件夹上单击…

专业130+总分400+云南大学通信847专业基础综考研经验(原专业课827)

今年专业130总分400云南大学通信上岸&#xff0c;整体考研感觉还是比较满意&#xff0c;期间也付出了很多心血&#xff0c;走过弯路&#xff0c;下面分享一下这一年考研得失&#xff0c;希望大家可以从中有所借鉴。 先说明我在考研报名前更换成云南大学的理由&#xff1a;&…

11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现

摘要 随着人们生活水平的提高和健康意识的增强&#xff0c;健康管理系统在日常生活中扮演着越来越重要的角色。本研究旨在设计并实现一款基于SSM框架的Android平台健康管理系统&#xff0c;为用户提供全面的健康监测和管理服务。 在需求分析阶段&#xff0c;我们明确了系统的…

【Windows下】Eclipse 尝试 Mapreduce 编程

文章目录 配置环境环境准备连接 Hadoop查看 hadoop 文件 导入 Hadoop 包创建 MapReduce 项目测试 Mapreduce 编程代码注意事项常见报错 配置环境 环境准备 本次实验使用的 Hadoop 为 2.7.7 版本&#xff0c;实验可能会用到的文件 百度网盘链接&#xff1a;https://pan.baidu…

python 涉及opencv mediapipe知识,眨眼计数 供初学者参考

基本思路 我们知道正面侦测到人脸时&#xff0c;任意一只眼睛水平方向上的两个特征点构成水平距离&#xff0c;上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时&#xff0c;垂直距离与水平距离的比值基本恒定 根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个…

clickhouse -- clickhouse解析复杂JSON数组

举例 - 查数据 select _id,doctorId,patientId,diagnosisList from patient_disease final where diagnosisList is not null limit 3;- 解析数组 SELECT _id,doctorId,patientId,visitParamExtractRaw(diagnosisList,diagnosisName) FROM patient_disease final where _id …

Docker构建自定义镜像

创建一个docker-demo的文件夹,放入需要构建的文件 主要是配置Dockerfile文件 第一种配置方法 # 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量&#xff0c;JDK的安装目录 ENV JAVA_DIR/usr/local# 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo…

gitlab-jenkins-shell-helm-chart-k8s自动化部署微服务

1.准备好编译环境的容器&#xff0c;所有容器的镜像制作在gemdale-dockerfile这个代码库里面&#xff0c;也可以直接拉取官方镜像部署 docker run --name node1420-patternx -v /data/var/www/:/data/var/www/ -v /var/jenkins_home/:/var/jenkins_home/ -v /mnt/hgfs/:/mnt/h…

Ubuntu安装nvidia GPU显卡驱动教程

Ubuntu安装nvidia显卡驱动 1.安装前安装必要的依赖 sudo apt-get install build-essential sudo apt-get install g sudo apt-get install make2.到官网下载对应驱动 https://www.nvidia.cn/Download/index.aspx?langcn 3.卸载原有驱动 sudo apt-get remove --purge nvidi…

Java---线程讲解(二)

文章目录 1. Runnable接口2. 卖票案例3. 同步代码块解决数据安全问题4. 同步方法解决数据安全问题5. 线程安全的类6. Lock锁 1. Runnable接口 1. 创建线程的另一种方法是声明一个实现Runnable接口的类&#xff0c;之后重写run()方法&#xff0c;然后可以分配类的实例&#xff0…

uni-app 微信小程序之好看的ui登录页面(一)

文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面&#xff08;一&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;二&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;三&#xff09; uni-app 微信小程…

html5各行各业官网模板源码下载(1)

文章目录 1.来源2.源码模板2.1 HTML5白色简洁设计师网站模板2.2 HTML5保护野生动物响应式网站模板 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134682321 html5各行各业官网模板源码下载&#xff0c;这个主题覆盖各行…

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…

点滴生活记录1

2023/10/10 今天骑小电驴上班&#xff0c;带着小鸭子一起。路上的时候&#xff0c;我给小鸭子说&#xff0c;你要帮我看着点路&#xff0c;有危险的时候提醒我&#xff0c;也就刚说完没几分钟&#xff0c;一个没注意&#xff0c;直接撞到一个拦路铁墩子上&#xff0c;车子连人歪…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心&#xff0c;负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引&#xff1a; 文档…