Python异常处理——走BUG的路,让BUG无处可走

news2025/1/19 20:34:34

作者:Insist--

个人主页:insist--个人主页

本文专栏:Python专栏

专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。

目录

一、了解python异常

1、BUG 单词的由来

2、什么是异常

二、常见的Python异常类型

三、如何捕获和处理异常

1、常规捕捉语法

2、捕捉指定异常

3、捕捉多个指定的异常


前言

在本文中,我将介绍Python异常的基础知识,包括了解python异常,常见的异常类型,以及如何捕获和处理异常。


一、了解python异常

Python异常处理是一种非常重要的编程技巧,它可以让你在编写代码时避免出现许多问题。如果程序在运行时发生报错的情况(例如:除以零、访问不存在的变量等等)。Python会引发异常并停止当前代码的执行。如果没有适当的处理措施,程序将终止并显示“Traceback”信息。

1、BUG 单词的由来

想要了解BUG 单词的由来,就要追溯到世界第一台万用计算机(马克二型)使用时遇到的一个故障,1945年9月9日,马克二型计算机无法正常工作了,技术人员尝试了很多办法,都没有解决问题,最后在70号继电器上找到了问题。技术人员观察了许久,发现是一只飞蛾导致的无法正常工作,将飞蛾抓出来后,用透明胶布贴到“事件记录本”中,并注明了“第一个发现虫子的实例”,在此之后,便有 BUG 这个单词。

2、什么是异常

当程序在运行时出现错误时,Python就无法执行错误之后的代码,同时会出现报错,这就是“异常”,也就是我们常说的BUG,异常可以是由代码错误导致的,也可以是由外部因素引起的。那么我们有没有办法在程序出现异常前,将他解决掉?当然有,我们可以使用 try  +  except 语句块来捕获和处理异常。


二、常见的Python异常类型

在了解捕获和处理异常之前,我们先来看看这些常见的异常类型

1、ZeroDivisionError:当我们将0作为被除数时,会发生ZeroDivisionError报错。

0bccdc7f45c645d9893a86394e12eeae.png

例如:

print(1 / 0)

解释:上面已经说过 ZeroDivisionError: 这种情况发生在将0作为被除数时。在数学中,0时不可以做成被除数的,所以 Python 会显示 ZeroDivisionError 异常。

2、ValueError: 当操作或函数适用于值超出范围时,会发生ValueError报错。

d64d2252c68c469681841601ee5fec31.png

例如:

result = int("insist")

解释:V比如上面的代码,我们尝试将字符串“insist”转换为整数,但是我们提供的字符串不能转换为整数。所以发生了ValueError报错。

3、KeyError: 当使用字典中不存在的键时会发生KeyError报错。

bea04763efa54f10bf510015199e0188.png

例如:

my_dict = {1:2}
value = my_dict["insist"]

解释:如上代码,我们尝试从字典中获取一个“”insist”(不存在)键时,会发生此异常。因为在字典中我们并没有定义“insist”,所以发生了 KeyError 报错。 

4、IndexError:当访问列表或其他支持索引的对象中不存在的索引时,会发生 IndexError 报错。

2cef6201d6c64589b7c12fe3b6637155.png 例如:

my_list = [1,2,3]
value = my_list[4]

解释:如上代码,我们尝试试图访问一个只有三个元素的列表的第四个元素。会发生此报错。


三、如何捕获和处理异常

在Python编程语言中,我们可以使用 try  +  except 语句块来捕获和处理异常。try语句块内写上可能引发异常的代码,而except语句块写上当异常发生时要执行的代码

1、常规捕捉语法

以下是一个简单的示例:

try:
    result = 1 / 0                  # 可能引发异常的代码
except :
    print("发生错误啦")               # 当除以零异常发生时要执行的代码

输出结果:

c16a7e91ba1745679fc4b8f9ea5aa19f.png

在上面的示例中,当除以零异常发生时,程序将执行except语句块中的代码并打印出“发生错误啦”。如果没有异常发生,该代码块将不会执行。

2、捕捉指定异常

以下是一个简单的示例:

try:
    result = 1 / 0                  # 可能引发异常的代码
except ZeroDivisionError:
    print("捕捉到了 ZeroDivisionError 错误")               # 当除以零异常发生时要执行的代码

输出结果:

在这个例子中,我们指定了一个异常 ZeroDivisionError ,当出现此异常时会正常输出“发生错误啦”,如果没有发生我们指定的错误,那么程序会发生报错并停止程序运行。

3、捕捉多个指定的异常

以下是一个简单的示例:

try:
    x = 1 / 0         # 尝试一些可能会引发异常的代码
except (ZeroDivisionError, TypeError):
    print("捕捉到了 ZeroDivisionError 或 TypeError ")   #异常时要做的事

输出结果:

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

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

相关文章

并联电容器电容量测试

试验目的 开展并联电容器电容量试验的目的是检查其电容值的变化情况, 以判断电容器内部接线是否正确, 内部各电容单元是否存在断线、 击穿短路或绝缘受潮等现象, 以避免在运行中发生事故。 试验设备 电容电感测试仪 厂家: 湖北众拓高试 试验方法 并联电容器电容量…

std : : vector

一.简介 std::vector 的底层实现通常基于动态数组(dynamic array),它是一种连续分配的内存块,允许元素的快速随机访问。下面是 std::vector 的一些关键特点和底层实现细节: 连续内存块:std::vector 内部使…

【Unity的HDRP下ShaderGraph实现权重缩放全息投影_(内附源码)】

实现权重缩放全息投影 效果如下 效果如下 顶点位置偏移 链接: 提取码:1234

NtripShare Cloud GNSS解算云平台之动态、快速静态、静态解算

过去半年以来基本精力都在测量机器人自动化监测领域,相对GNSS平台本身除了进行逻辑更新之外,算法层面基本没尽兴大的改动,目前NtripShare Cloud V3版本中支持三种解算方式,即动态、快速静态、静态。 1、动态---RTK算法&#xff0…

C++:vector

目录 一、关于vector 二、vector的相关函数 三、相关函数的使用 ①构造函数 ②size ③[] ​编辑 ④push_back ⑤迭代器iterator ⑥reserve ⑦resize ⑧find ⑨insert ⑩erase ⑪sort 一、关于vector vector比较像数组 观察可知,vector有两个模板参数…

使用Linux下的MySQL数据库

PS:文章最后有“开心一刻”,记得看哦,给生活增加点儿趣味。 大家好,我是Linux持续学习者。在本文中,我们将介绍如何在Linux系统下安装、配置和使用MySQL数据库。MySQL是一款使用最广泛的开源关系型数据库管理系统&…

Qt的窗口系统

代码仓库以及参考文件见文章底部 坐标体系 要想学好GUI,界面的坐标系首先要搞清楚 在Qt编程中,以左上角为原点,X向右增加,Y向下增加。 对于所有嵌套的窗口,其坐标是相对于父窗口来说的。 QWidget 所有窗口以及窗口控件都是从QWidget直接或者间接派生出来的。 对象模…

VL系列 Exchanging-based Multimodal Fusion with Transformer 论文阅读笔记

多模态融合 Exchanging-based Multimodal Fusion with Transformer 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 深度多模态融合 四、方法4.1 低维投影和 embedding 归一化低维投影Embedding 归一化 4.2 多模态交换Transformer 基础CrossTransformer 4.3 训练目标 五、实…

如何自己开发一个前端监控SDK

最近在负责团队前端监控系统搭建的任务。因为我们公司有统一的日志存储平台、日志清洗平台和基于 Grafana 搭建的可视化看板,就剩日志的采集和上报需要自己实现了,所以决定封装一个前端监控 SDK 来完成日志的采集和上报。 架构设计 因为想着以后有机会…

2023/09/08 qtc++ day3

自行封装一个栈的类,包含私有成员的属性:栈的数组,记录栈顶的变量 成员函数:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求站的大小 头文件 #ifndef STACK_H #define STACK_H #include …

el-table操作列动态自适应设置(根据操作项个数动态设置宽度)

一、目的 目的:表格操作列宽度,根据操作项多少,自动调节宽度背景:用el-table组件开发时,对于表格的操作列的自适应宽度是一个问题,如果不设置,操作按钮多时会有换行问题。如果设置最小宽度或宽…

Tomcat 的部署和优化

1、什么是Tomcat Tomcat:是一个免费的、开源的轻量级web应用服务器,普遍用于中小型系统和访问用户流量小的场合,由于是java语言所开发开发,所以要jdk环境 由 web容器、servlet容器、jsp容器构成 web容器:完成 Web 服…

个人主页网站动态星空背景源码(带后台版本)

动态星空背景个人主页网站源码是一种用于创建个人主页的开源项目。它具有一个令人印象深刻的动态星空背景,为用户提供了一个独特而吸引人的网页设计。此源码还包含一个后台版本,使用户能够轻松管理和更新他们的个人主页内容。 通过该源码,用…

stringBuffer.append(“字符串参数“);这个在字符串参数后添加空格怎么写

stringBuffer.append(“字符串参数”);这个在字符串参数后添加空格怎么写? 要在字符串参数后添加空格,可以直接在字符串参数的末尾使用空格字符,像这样: stringBuffer.append("字符串参数 ");这样就在字符串参数后添加…

试图替代 Python 的下一代AI编程语言:Mojo

文章目录 为什么叫 Mojo ?Python 家族的一员,MojoPython 的好处:Python 兼容性Python 的问题移动和服务器部署:Python 子集和其他类似 Python 的语言: Mojo 是一种创新的编程语言,结合了 Python 的可用性和…

【Unity】 2D 游戏 库存模块实现

库存模块主要参考了 youtube 上的视频 BMo 的 Flexible INVENTORY SYSTEM in Unity with Events and Scriptable Objects 和 Simple Inventory UI in Unity With Grid Layouts 这两个视频是一个系列 还是一个视频也是 BMo的 How To INTERACT with Game Objects using UNITY E…

git:亲测体验rebase与merge

rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…

【C++模拟实现】手撕AVL树

【C模拟实现】手撕AVL树 目录 【C模拟实现】手撕AVL树AVL树的介绍(百度百科)AVL树insert函数的实现代码验证是否为AVL树AVL树模拟实现的要点易忘点AVL树的旋转思路 作者:爱写代码的刚子 时间:2023.9.10 前言:本篇博客将…

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Stable Diffusion 免费升级 SDXL 1.0,哪些新特性值得关注?体验如何?5 分钟带你体验!

一、引言 7 月 26 日,Stability AI 发布了 SDXL 1.0,号称目前为止,最厉害的开放式图像生成大模型。 它到底有没有网上说的那么炸裂?真的已经实现了像 midjourney 一样 靠嘴出图 的功能吗?相对于之前的版本,…