Python基础语法入门(第二十一天)——异常处理

news2024/12/23 13:20:54

在Python中,异常处理是一种机制,用于捕获和处理在程序执行过程中发生的错误。

Python中的异常处理可以使用try-except语句块来实现。try语句块可能包含可能出现错误的代码段,而except语句块包含处理错误的代码段。当try语句块中的代码发生错误时,程序跳转到相应的except语句块中执行。

基本定义

异常是程序执行过程中出现的影响程序正常执行的一个事件。当异常产生时如果没有对异常进行捕获并处理则程序会终止执行。异常处理就是让程序在处理完异常之后继续正常执行从而使程序不至于在出现异常时导致退出或崩溃。常见的异常类型如下:

Exception:所有异常的基类。可以用来捕获任何类型的异常。
ValueError:当一个函数接收到一个无效的参数时引发。
TypeError:当一个操作或函数应用于不适当类型的对象时引发。
IndexError:当访问一个不存在的列表索引或字符串索引时引发。
KeyError:当访问一个不存的字典键时引发。
FileNotFoundError:当试图打开一个不存在的文件时引发。

异常捕获

异常处理的基本语法如下:

try:
  # 可能出现错误的代码
except ExceptionType:
  # 处理错误的代码

关键字try后是可能出现错误的代码段。

关键字except后是异常类型,用来指定处理哪种类型的错误。可以通过ExceptionType捕获特定异常的类型,也可以用except关键字单独捕获所有的异常。

示例:

try:
  numbers = [1, 2, 3]
  print(numbers[3])  # 超出列表长度引发IndexError异常
except IndexError:
  print("Index out of range")  # 错误处理代码

执行结果:

在这里插入图片描述

在这个示例中,try语句块中的代码尝试访问一个索引超出列表长度的元素。由于会引发一个IndexError异常,程序会跳转到except语句块中执行,输出"Index out of range"。注意:一个异常处理模块至少有一个try和一个except。

如果不捕获异常的话代码执行结果如下图所示:

在这里插入图片描述

异常处理机制增强

除了基本的try-except语句,还可以使用其他关键字来增强异常处理机制。例如:

else:定义在try语句块结束后,并且没有引发异常时执行的代码段。
finally:定义在try-except语句块结束后总是执行的代码段,不管是否引发异常。

示例

try:
  x = 10 / 0
except ZeroDivisionError:
  print("Cannot divide by zero")
else:
  print("Division successful")  # 此代码段不会执行,因为有异常发生
finally:
  print("Finally block executed")  # 总是会执行,不管是否有异常发生

在这个示例中,try语句块中的代码尝试将10除以0,引发一个ZeroDivisionError异常。因此,程序跳转到except语句块中执行,输出"Cannot divide by zero"。else语句块中的代码不会执行,最后会执行finally语句块中的代码,输出"Finally block executed"。

自定义异常类

在Python中是允许用户定义自己的异常类的,以便将特定类型的错误与标准异常区分开来。自定义异常类可以继承自Exception基类或其子类,以获得标准异常类的特性。请看下方示例:

class MyCustomException(Exception):
  pass

try:
  raise MyCustomException("This is a custom exception")
except MyCustomException as e:
  print(e)  # 输出自定义异常的错误信息

在这个示例中,定义了一个自定义异常类MyCustomException,它继承自Exception类。然后,使用raise关键字引发自定义异常,并传递错误消息作为参数。接着,使用except语句捕获自定义异常,并打印错误消息。

通过自定义异常类,可以将程序中的特定错误归类为不同的异常类型,从而使错误处理更加准确和可读。同时,还可以根据需要为自定义异常类添加额外的属性和方法,以满足特定的错误处理需求。

以下是一个稍复杂的示例,演示如何在自定义异常类中添加属性和方法:

class InvalidInputError(Exception):
  def __init__(self, message, input_value):
    super().__init__(message)
    self.input_value = input_value

  def get_input(self):
    return self.input_value

try:
  value = "abc"
  if not value.isdigit():
    raise InvalidInputError("Invalid input", value)
except InvalidInputError as e:
  print(e)  # 输出错误消息
  print(e.get_input())  # 输出输入值

在这个示例中,自定义异常类InvalidInputError添加了一个名为input_value的属性,用于存储错误的输入值。在异常类的构造函数中,使用super().__init__()调用基类的构造函数,并传递错误消息作为参数。然后,使用get_input()方法获取输入值。

在try语句块中,如果值不是数字,就会引发自定义异常。在except语句块中,可以访问异常对象的属性和方法,以获取错误信息和输入值。

通过自定义异常类,可以根据不同的错误情况提供更具体的错误信息和处理方法,从而提高代码的可读性和维护性。

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

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

相关文章

【仿写tomcat】二、扫描java文件,获取带有@WebServlet注解的类

tomcat仿写 项目结构扫描文件servlet注解map容器servlet工具类启动类调用 项目结构 扫描文件之前当然要确定一下项目结构了,我这里的方案是tomcat和项目同级 项目的话就仿照我们平时使用的结构就好了,我们规定所有的静态资源文件都在webApp目录下存放…

数学建模之“灰色预测”模型

灰色系统分析法在建模中的应用 1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测 灰色系统的应用范畴大致分为以下几方面: (1)灰色关…

go 协程并发数控制

错误的写法&#xff1a; 这里的<-ch 是为了从channel 中读取 数据&#xff0c;为了不使channel通道被写满&#xff0c;阻塞 go 协程数的创建。但是请注意&#xff0c;go workForDraw(v, &wg) 是不阻塞后续的<-ch 执行的&#xff0c;所以就一直go workForDraw(v, &…

react使用antd的table组件,实现点击弹窗显示对应列的内容

特别提醒&#xff1a;不能在table的columns的render里面设置弹窗组件渲染&#xff0c;因为这会导致弹窗显示的始终是最后一行的内容&#xff0c;因为这样渲染的结果是每一行都会重新渲染一遍这个弹窗并且会给传递一个content的值&#xff0c;渲染到最后一行的时候&#xff0c;就…

水库工程标准化管理运行方案

水库工程标准化管理是指在水库建设、运行和维护过程中&#xff0c;按照一定的标准和规范进行管理&#xff0c;以确保水库工程的安全、高效运行。标准化管理可以提高水库工程的质量、节约资源、保护环境&#xff0c;并最大程度地减少事故风险。以下是水库工程标准化管理的几个重…

【Redis】Redis 的主从同步

【Redis】Redis 的主从同步 很多企业都没有使用 Redis 的集群&#xff0c;但是至少都做了主从。有了主从&#xff0c;当主节点(Master) 挂掉的时候&#xff0c;运维让从节点 (Slave) 过来接管&#xff0c;服务就可以继续&#xff0c;否则主节点需要经过数据恢复和重启的过程&a…

2.SpringMvc中Model、ModelMap和ModelAndView使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…

使用JMeter创建数据库测试

好吧&#xff01;我一直觉得我不聪明&#xff0c;所以&#xff0c;我用最详细&#xff0c;最明了的方式来书写这个文章。我相信&#xff0c;我能明白的&#xff0c;你们一定能明白。 我的环境&#xff1a;MySQL&#xff1a;mysql-essential-5.1.51-win32 jdbc驱动&#xff1a;…

python有绿色版软件吗,python绿色版运行程序

大家好&#xff0c;给大家分享一下python有绿色版软件吗&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 简介 本文介绍使用 conda 命令&#xff08;来自 Anaconda 软件包&#xff09;创建绿色便携版 python 的方法。此版本不但有 Python 的…

【C++初阶】引用计数和写时拷贝是什么?用来干嘛的?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

jeecgboot-vue3 查询区 label 文字居左实现

以系统管理中的系统角色界面为例 操作步骤 1. 通过路由或者工具找到当前代码所在的文件 src/views/system/role/index.vue 2. 找到 useListPage 调用&#xff0c;fromConfig 对象加入 labelWidth 和 rowProps 属性 formConfig: {labelWidth: 65, // 设置所有的label宽rowPr…

badgerdb里面的事务

事务的ACID A 原子性&#xff08;Atomicity&#xff09; 多步骤操作&#xff0c;只能是两种状态&#xff0c;要么所有的步骤都成功执行&#xff0c;要么所有的步骤都不执行&#xff0c;举例说明就是小明向小红转账30元的场景&#xff0c;拆分成两个步骤&#xff0c;步骤1&#…

13、Redis与Mysql数据双写一致性

Redis与Mysql数据双写一致性 1、 复习&#xff0b;面试题 先动Mysql&#xff0c;再动Redis&#xff0c;两害相衡取其轻&#xff0c;避免Redis业务key突然消失&#xff0c;多线程请求集火打满mysql 动&#xff0c;写操作&#xff0c;先更新数据库&#xff0c;在删除缓存。回写的…

面试时如何回答接口测试怎么进行

一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 …

基础课-不等式

1.记录 最小公倍数是最大公约数的倍数 2.均值不等式 和定积大 积定和小- 机顶盒小

83-基于stm32单片机DHT11温湿度监测报警系统Proteus仿真+源码

资料编号&#xff1a;083 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏DHT11温湿度蜂鸣器&#xff0c;制作一个温湿度采集&#xff0c;OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、湿度上限&#xff1b; 3、当采集温度大于设置温度&#xff0…

Redis系列(三):深入解读Redis主从同步机制

首发博客地址 https://blog.zysicyj.top/ Redis高可靠靠什么保证&#xff1f; 为什么要提这个呢&#xff0c;因为Redis主从库目的呢其实就是为了实现高可靠。上篇文章中我们说过Redis的AOF、RDB日志其实就是为了减少数据丢失&#xff0c;这是高可靠的一部分。 这篇文章呢&#…

一次网络不通“争吵“引发的思考

作者&#xff1a; 郑明泉、余凯 为啥争吵&#xff0c;吵什么&#xff1f; “你到底在说什么啊&#xff0c;我K8s的ecs节点要访问clb的地址不通和本地网卡有什么关系…” 气愤语气都从电话那头传了过来&#xff0c;这时电话两端都沉默了。过了好一会传来地铁小姐姐甜美的播报声…

使用Druid解析SQL,获取SQL中所有使用的表

一、sqlParse组成 Druid SQL Parser分三个模块&#xff1a; - Parser - AST - Visitor 1.1 Parser parser是将输入文本转换为ast&#xff08;抽象语法树&#xff09;&#xff0c;parser有包括两个部分&#xff0c;Parser和Lexer&#xff0c;其中Lexer实现词法分析&#x…

vue项目根据word模版导出word文件

一、安装依赖 //1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver npm install file-saver --save二、创建word模版 也就是编辑一个word文档&#xff0c;文档中需要动态取值的…