Python教程(19)——python异常处理

news2025/1/24 17:52:07

异常处理

    • 什么是异常
    • 异常处理方式
      • try-except语句
      • 捕获异常类型
    • 相关的异常类型

什么是异常

在计算机编程中,异常(Exception)是指在程序执行过程中发生的错误或异常情况。当出现异常时,程序无法正常继续执行,因此需要采取一些特殊的措施来处理异常,以防止程序崩溃或产生意外结果。

异常可以在程序中的任何地方发生,可能是由错误的输入、无效的操作、资源不足、硬件问题或其他未预料的情况引起的。例如,当尝试除以零、访问不存在的文件、连接失败等情况发生时,都会引发异常。

在Python等高级编程语言中,异常处理机制提供了一种结构化的方式来捕获和处理异常。通过在程序中使用try-except语句块,可以捕获并处理异常,让程序能够优雅地处理错误情况。在try块中放置可能引发异常的代码,在except块中编写处理异常的代码。

异常处理的目的是让程序有能力检测和响应异常情况,以及提供适当的错误处理和恢复机制。通过捕获和处理异常,我们可以避免程序崩溃、提供友好的错误提示、执行备用操作或回滚之前的操作,从而提高程序的稳定性和容错性。

说白了,异常是指在程序执行期间发生的错误或异常情况,是一种不可避免的行为,而异常处理是一种机制,用于检测和处理这些异常情况,以保证程序能够继续执行,并提供适当的错误处理和恢复机制。
在这里插入图片描述

异常处理方式

Python的异常处理机制允许我们在代码中捕获和处理可能出现的异常情况,以保证程序的稳定性和可靠性。在Python中,异常处理是通过使用try-except语句块来实现的。

try-except语句

  1. 使用try-except语句来捕获并处理异常。try块中放置可能引发异常的代码,而except块中定义了对异常的处理逻辑。当try块中的代码引发异常时,程序将跳转到匹配的except块进行处理。可以使用不同的except块处理不同类型的异常,也可以使用一个except块处理多个异常类型。
 try:
     # 可能引发异常的代码
 except ExceptionType:
     # 处理异常的逻辑
  1. 可以在try-except语句中添加一个可选的else语句块,用于处理在try块中没有引发异常时需要执行的代码。else块中的代码将在try块中的代码执行完毕,并且没有引发任何异常时执行。
try:
   # 可能引发异常的代码
except ExceptionType:
   # 处理异常的逻辑
else:
   # 没有异常发生时执行的代码
  1. 可以在try-except语句中添加一个可选的finally语句块,用于定义一定会执行的代码块。不管有没有异常发生,finally语句块中的代码都会执行。finally语句块通常用于资源的释放和清理操作,例如关闭文件、释放网络连接等。
try:
   # 可能引发异常的代码
except ExceptionType:
   # 处理异常的逻辑
finally:
   # 一定会执行的代码

捕获异常类型

  1. 捕获单个异常类型:try-except语句块只会触发一个类型的异常,这时候可以指定具体的异常类型。
try:
   num = int(input("请输入一个整数:"))
   result = 10 / num
   print("结果:", result)
except ValueError:
   print("输入的不是有效的整数")

在这个示例中,int(input("请输入一个整数:"))语句可能引发ValueError异常,如果用户输入的不是有效的整数。如果引发了该异常,程序会跳转到except ValueError块内部的逻辑,打印出错误信息。

  1. 捕获多个异常类型:try-except语句块会触发多种类型的异常,不管先捕获哪种类型的异常,程序都会跳到except那里。
try:
    num1 = int(input("请输入一个整数:"))
    num2 = int(input("请输入另一个整数:"))
    result = num1 / num2
    print("结果:", result)
except (ValueError, ZeroDivisionError):
    print("输入的不是有效的整数或除数不能为零")

在这个示例中,我们使用了一个元组(ValueError, ZeroDivisionError)作为异常类型的参数,在except语句中捕获了ValueErrorZeroDivisionError两种异常类型。

  1. 捕获所有异常:这种方式是最方便快捷的,因为很多时候开发人员也不知道程序要触发的异常的具体名称,直接捕获所有异常,是最快捷的。
try:
   file = open("data.txt", "r")
   content = file.read()
   file.close()
except Exception as e:
   print("发生异常:", str(e))

在这个示例中,尝试打开文件data.txt进行读取操作。如果在打开或读取文件的过程中发生了任何异常,程序会跳转到except Exception as e块内部的逻辑,打印出异常信息。

相关的异常类型

在Python当中,异常类型是很多。以下是一点整理的一些关于异常的类型。如果有错误的,欢迎大家指出。

异常类型说明
Exception所有异常的基类
SyntaxError语法错误,通常是由于代码书写不符合语法规则造成的
IndentationError缩进错误,通常是由于缩进不正确造成的
NameError名称错误,通常是在代码中使用了一个未定义的变量或函数名
TypeError类型错误,通常是在进行不兼容类型的操作时引发的
ValueError值错误,通常是在逻辑上不合理或无效的值被传递时引发的
IndexError索引错误,通常是在尝试访问列表、元组、字符串等类型时索引超出范围
KeyError键错误,通常是在尝试访问字典中不存在的键时引发的
AttributeError属性错误,通常是在尝试访问对象不存在的属性时引发的
FileNotFoundError文件未找到错误,通常是在尝试打开或读取不存在的文件时引发的
IOError输入输出错误,通常是在进行文件操作时发生的错误
ZeroDivisionError除零错误,通常是在尝试进行除以零的运算时引发的
AssertionError断言错误,通常是在调用assert语句时条件为False时引发的
ImportError导入错误,通常是在导入模块或包时出现问题时引发的
OverflowError溢出错误,通常是由于数值超过其类型的范围导致的
KeyboardInterrupt键盘中断错误,通常是用户在运行程序时按下了Ctrl+C

更多精彩内容,请关注同名公众:一点sir(alittle-sir)

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

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

相关文章

【linux】tail的基本使用

在linux可以用find查找一个文件,可以用grep查找符合要求的文件内容,但是有的时候希望查看文件的前几行或者后几行(其实这种场景经常可以遇到,比如接触到日志分析的时候),那就应该使用head和tail这两个工具了…

亲爱的程序猿们,元旦快乐!

新年祝福 在这个充满欢笑和祝福的日子里,我想对你们说: 新的一年,愿你们像代码一样充满逻辑,像算法一样追求高效,像编程语言一样多样化! 2024年即将到来,预测几个行业趋势: 人工…

SpringBoot+拦截器(Interceptor)

记录一下SpringBoot的拦截器(Interceptor)使用 拦截器(Interceptor)是AOP面向切面编程的思想来实现的,对于只写代码的来说,具体如何实现不需要多关心,只需要关心如何去使用,会用在那些地方。 当http请求进入Springboot应用程序后…

第一部分 随机事件和概率

目录 无放回题目(一次摸多个) 方法: 例1 有放回题目(进行多次,每次情况一致) 方法: 例2 事件的概率 方法: 例3 条件概率 方法: 例4 全概率公式 方法: 例5 贝叶斯公式 方法: 例6 无放回题目(…

方太厨电,在创新科技中看见烟火人间

人类的历史,就是一部创新的历史。科普作者马特里德利在《创新的起源:一部科学技术进步史》写道:能源是所有创新之源。 火的发明和使用,就是一种创新,人类第一次通过控制热量的转换来做功,依靠火来取暖和烹饪…

使用频率分析求周期性

通常很难通过观察时间测量值来表征数据中的振荡行为。频谱分析有助于确定信号是否为周期性信号并测量不同周期。 办公楼内的温度计每半小时测量一次室内温度,持续四个月。加载数据并对其绘图。将温度转换为摄氏度。测量时间以周为单位。因此,采样率为 2 …

高并发处理专题研究 - epoll并发编程[更新中]

文章目录 1 前置知识1.1 Socket编程基础Socket概述Socket通信模型Socket API一个简单的Socket编程实例 1.2 IO多路复用1.3 阻塞原理 2 epoll原理2.1 epoll概述2.2 epoll系统调用epoll_create()epoll_ctl()epoll_wait() 2.3 epoll工作原理 3 示例代码及演示 1 前置知识 1.1 Soc…

Oracle初始化参数修改后,是否需要重启才能生效

可以查看 v$parameter或v$parameter2动态性能视图的ISSYS_MODIFIABLE列。此列指示是否可以使用 ALTER SYSTEM 更改参数以及更改何时生效: IMMEDIATE - 无论用于启动实例的参数文件的类型如何,都可以使用 ALTER SYSTEM 更改参数。 更改立即生效。DEFERRE…

spring核心与思想

spring核心与思想 Spring 是什么?什么是容器?什么是 IoC?传统程序开发传统程序开发的缺陷解决传统开发中的缺陷控制反转式程序开发对⽐总结规律 理解 Spring IoCDI 概念说明 Spring 是什么? Spring 指的是 Spring Framework&…

青龙面板的安装

一、安装docker 首先,需要在服务器上安装docker。 没有服务器的可以使用虚拟机,或申请一台三丰云的免费云服务器体验一下,独立IP地址,送免备案服务,可以满足基本的使用,三丰云上还有免费虚拟主机等其他免费…

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解

目录 一、[Vuex](https://vuex.vuejs.org/zh/) 概述1.是什么2.使用场景3.优势4.注意: 二、需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 三、vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index…

下载大模型,保存阿里云盘

一、解决场景 下载模型或数据集,到国内云GPU平台、阿里云盘(便于持久化储存,或者分享朋友)。 及时收藏,下次还能找到! 二、优势 此方法可以避免大文件下载到本地——占用内存,受到小带宽网络…

SpringBoot定时监听RocketMQ的NameServer

问题分析 自己在测试环境部署了RocketMQ,发现namesrv很容易挂掉,于是就想着监控,挂了就发邮件通知。查看了rocketmq-dashboard项目,发现只能监控Broker,遂放弃这一路径。于是就从报错的日志入手,发现最终可…

vue整理面试题

1. v-if/v-show的区别? v-if"表达式" 当表达式值true,v-if所作用的元素显示 否则隐藏 v-show"表达式" 当表达式值true,v-if所作用的元素显示 否则隐藏 理解: v-if控制元素显示与隐藏,通过js创建dom元素或删除…

用通俗易懂的方式讲解大模型:ChatGLM3-6B 部署指南

最近智谱 AI 对底层大模型又进行了一次升级,ChatGLM3-6B 正式发布,不仅在性能测试和各种测评的数据上有显著提升,还新增了一些新功能,包括工具调用、代码解释器等,最重要的一点是还是保持 6B 的这种低参数量&#xff0…

阿里员工:本月收入489325元,开心过年

阿里员工:本月收入489325元,开心过年 近日,一名阿里员工在社交媒体上爆料自己的本月收入,竟然高达48.9万,真是让人目瞪口呆。 震惊之余,大家都很好奇这么高收入是怎么来的,再仔细看工资单&…

C++初阶——基础知识(内联函数)

目录 1.内联函数 内联函数的示例代码 1.内联函数 是一种 C 中的函数定义方式,它告诉编译器在每个调用点上插入函数体的副本,而不是像普通函数那样在调用时跳转到函数体所在的地址执行。这样可以减少函数调用的开销,提高程序的执行效率。 …

【算法】数论---欧拉函数

什么是欧拉函数? 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n) φ(1)1 当m,n互质时,φ(mn)φ(m)∗φ(n) 一、求一个正整数的欧拉函数---(先对它分解质因数,然后套公式&#xf…

子网划分问题(实战超详解)_主机分配地址

文章目录: 子网划分的核心思想 第一步,考虑借几位作为子网号 第二步,确定子网的网络地址 第三步,明确网络地址,广播地址,可用IP地址范围 一些可能出现的疑问 实战 题目一 子网划分的核心思想 网络号不变,借用主机号来产生新的网络 划分前的网络:网络号主机号 划分后的网络:原网…

SpringBoot 一个注解实现数据脱敏

什么是数据脱敏 数据脱敏是指对某些敏感信息,例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息,通过脱敏算法进行数据变形,以保护敏感隐私数据。 数据脱敏通常涉及以下几种主要方法: 替换: 将原始…