Python学习之路——异常捕获

一、什么是异常

当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是bug

二、异常的捕获方法

当我们的程序遇到bug,那么就下来有两种情况

①整个程序因为一个bug停止运行

②对bug进行提示,整个程序继续运行

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

1、捕获常规异常

(一)基本语法

try:

        可能发生错误的代码

except:

        如果出现异常执行的代码

 (二)快速入门

需求:尝试以‘r’模式打开文件,如果文件不存在,则以‘w’方式打开

try:

        f = open('python.txt', 'r, encoding = 'utf-8')

except:

        f = open('python.txt', 'w, encoding = 'utf-8')

2、捕获指定异常

try:

        print(1 / 0)

except NameError as a:

        print(f'出现变量名称异常:{a}')

except ZeroDivisionError as b:

        print(f'出现^异常:{b}')

3、捕获多个异常

try:

        # print(name)

        1 / 0

except (NameError, ZeroDivisionError) as a:

        print(f'捕获到的异常是:{a}') 

4、捕获全部异常

# 两种一样的写法,都可以捕获到全部异常

# 第一种方式

# try:

#

# except:

# 第二种方式

try:

        # print(name)

        1 / 0

except Exception as a:

        print(f'出现异常了:{a}')

5、异常else/finally:

(这两个参数是可选的)

else表示的是如果没有异常要执行的代码

name = 'hello'
try:print(name)
except Exception as a:print(f'出现异常了,且为{a}类型')# finally一般用在文件的相关操作中,因为不管怎么最后都要关闭文件
finally:print('hello,不管怎样我都会在的')

三、异常具有传递性

1、怎么理解呢

当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02中,当func02也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递

需要注意的是:

当所有函数都没有捕获异常的时候,程序就会报错

程序结果:

2、代码示例

# 定义一个出现异常的函数
def func01():print('这是func01函数的起始')print(name)print('这是func01函数的结束')# 定义一个不会出现异常的函数
def func02():print('这是func02函数的起始')func01()num = 1 / 0print('这是func02函数的结束')# 定义一个函数调用上面的函数
def main():print('main函数开始执行')try:func02()except Exception as a:print(f'出现异常了,并且异常为:{a}')finally:print('我一直都在')print('main函数执行完毕')if __name__ == '__main__':main()

程序执行结果:

从程序的执行结果可以看出

①执行的是main函数

②进入函数func02

③进入函数func01

④由于函数func01中出现了错误,导致并非正常退出函数,而是中断函数

⑤执行finally

⑥输出最后一个print语句

四、总结

干货可能不多,但是的确不难,异常可以提高程序的健壮性,还是可以在之后自己开发的程序中加入异常捕获的。

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

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

相关文章

Statistics with Python Specialisation: 数据库、可视化方法

目录 前言Numpy Arrays (the ndarray)1. 导入 NumPy:2. 创建 NumPy 数组:3. 数组的基本属性:4. 访问数组元素:5. 数组切片:6. 数学运算: pandas 示例:用平均值填充缺失值ScipyMatPlotLib&#x…

Elasticsearch:和 LIamaIndex 的集成

LlamaIndex 是一个数据框架,供 LLM 应用程序摄取、构建和访问私有或特定领域的数据。 LlamaIndex 是开源的,可用于构建各种应用程序。 在 GitHub 上查看该项目。 安装 在 Docker 上设置 Elasticsearch 使用以下 docker 命令启动单节点 Elasticsearch 实…

注解(Annotations)是什么?你用过哪些注解?解释依赖注入(DI)。

在编程语言中,注解(Annotation)是一种元数据机制,允许程序员向源代码中添加信息,这些信息可以被编译器、IDE或其他工具读取和处理,但不会影响程序的运行时行为。注解主要用于代码的自文档化、编译时检查、运…

chromedriver+Selenium+springboot+Java实现后端截图

chromedriver这种方法实现截图,依赖服务器端的谷歌浏览器软件,需要在服务器端下载谷歌浏览器。 Windows服务器说明 1.下载谷歌浏览器 2.根据第一步下载的谷歌浏览器版本,下载chromedriver,可以在这个页面找到和版本相近的版本去下…

docker部署Jira+配置MySQL8数据库

写在前面:如果你通过docker安装Jira且启动过,然后你现在又想使用mysql数据库,需要注意 你除了停掉原有容器,还需要删除:/var/lib/docker/volumes/jiraVolume/_data下的文件,否则启动后会无法正常使用。注意…

Redis 笔记一

概览 1.Redis核心数据存储结构 2.Redis底层String编码int&embstr&raw 3.Redis底层压缩列表&跳表&哈希表 4.Redis底层Zset实现压缩列表和跳表如何选择 5.基于Redis实现微博&抢红包&12306核心业务 辅助学习:Redis 教程 | 菜鸟教程 1.Redis为什…

ArcGIS初始化软件界面Normal.mxt

ArcGIS有时候永久了,或者呢突然不自觉软件界面乱了,或者一些窗口打开却找不到! 这时候可以去删除arcgis的界面配置文件,Normal.mxt 删除后再打开软件,软件界面就会回到初始化设置了! 文件所在的路径&…

从零开始学习Zeppelin:大数据可视化分析的交互式开发系统!

介绍:Apache Zeppelin是一个基于Web的交互式开发系统,主要用于进行大数据可视化分析。其核心概念是notebook,所有的操作都可以在notebook中完成。Zeppelin提供了一套非常全面的数据分析解决方案,支持数据采集、数据发现、数据分析…

网络安全应急响应灾备KB

目录 应急响应 定义 特点 国家相关标准和文件 事件分类与分级 应急响应组织 取证与保全 信息安全应急响应管理过程 灾备 关键词 灾备政策 灾备等级 灾备策略 受害恢复能力级别 灾难恢复管理过程 应急响应 定义: 指组织为了应对突发/重大信息安全管理…

canal server初始化源码分析

CanalLauncher类是canal server端启动的入口类,跟随代码进行深入。 在开始之前,我们可以先了解下, canal 配置方式 ManagerCanalInstanceGenerator: 基于manager管理的配置方式,实时感知配置并进行server重启Spring…

k8s---ingress对外服务(七层)

ingress 概念 k8s的对外服务,ingress service作用现在两个方面: 1、集群内部:不断跟踪的变化,更新endpoint中的pod对象,基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部:类似于负载均衡器&a…

elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询

ES-DSL查询语法(全文检索、精准查询、地理坐标查询) 1.DSL查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1.1.DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查…

Python ddddocr 构建 exe 程序后运行报错:Failed Load model ... common_old.onnx

文章目录 ddddocr版本简单的 demo解决方案个人简介 ddddocr ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库,其由作者与kerlomz共同合作完成,通过大批量生成随机数据后进行深度网络训练,本身并…

qwen在vLLM下的长度外推简易方法

目的 在当前的版本vLLM中实现qwen的长度外推。 解决方法 在qwen的config.json中,增加如下内容: {"rope_scaling": { "type": "dynamic", "factor": 4.0} }dynamic:动态NTK factor:缩放因子,外推长…

虚拟环境中pip install不生效的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

R语言【base】:interactive():R语言是否在交互状态下运行?

Package base version 4.2.0 Usage interactive() Details 交互式的 R 会话是指有一个虚拟的操作手与 R 交互,比如 R 可以针对错误的输入提示更正,或者也可以询问接下来如何处理,或者认为这是可以的并且进行下一步。 GUI 控制台将安排在交…

宏集干货丨探索物联网HMI的端口转发和NAT功能

来源:宏集科技 工业物联网 宏集干货丨探索物联网HMI的端口转发和NAT功能 原文链接:https://mp.weixin.qq.com/s/zF2OqkiGnIME6sov55cGTQ 欢迎关注虹科,为您提供最新资讯! #工业自动化 #工业物联网 #HMI 前 言 端口转发和NAT功…

vue 里 props 类型为 Object 时设置 default: () => {} 返回的是 undefined 而不是 {}?

问题 今天遇到个小坑&#xff0c;就是 vue 里使用 props 传参类型为 Object 的时候设置 default: () > {} 报错&#xff0c;具体代码如下 <template><div class"pre-archive-info"><template v-if"infoData.kaimo ! null">{{ infoD…

ubuntu系统(10):使用samba共享linux主机中文件

目录 一、samba安装步骤 1、Linux主机端操作 &#xff08;1&#xff09;安装sabma &#xff08;2&#xff09;修改samba配置文件 &#xff08;3&#xff09;为user_name用户设置samba访问的密码 &#xff08;4&#xff09;重启samba服务 2、Windows端 二、使用 1、代码…

K8s(四)Pod资源——pod生命周期、重启策略、容器钩子与容器探测

目录 Pod生命周期 Pod重启策略 初始化容器 容器钩子 容器探测 启动探测 存活探测 就绪探测 参考资料 Pod 的生命周期 | Kubernetes Init 容器 | Kubernetes Pod的生命周期可以分为以下几个阶段&#xff1a; Pending&#xff08;等待&#xff09;&#xff1a;在这个…