探索Python异常:让程序不再崩溃!

news/2024/4/28 13:57:41/文章来源:https://blog.csdn.net/m0_73888323/article/details/131734475

在这里插入图片描述

文章目录

  • 前言
  • 什么是异常
  • 捕获异常
    • 基本语法
    • 捕获指定类型异常
    • 捕获多个指定类型的异常
    • 捕获异常描述信息
    • 捕获所有异常
    • else
    • finally
  • 异常的嵌套
  • 自定义异常
  • 结语

前言

在编程的世界中,我们常常会面对各种各样的错误和异常情况。尤其当我们使用Python这样的高级编程语言时,理解和处理异常变得至关重要。毕竟,光鲜的代码往往只是表象,而异常处理才是程序稳定性和可靠性的关键所在。

本博客将带你深入了解Python异常处理的重要性,并教你如何优雅地应对各种异常情况。
在这里插入图片描述

什么是异常

在 python 中,异常大致有两种情况:

一种是当我们写代码的时候就会提示的异常信息。
在这里插入图片描述
另外一种就是我们运行代码时出现的异常。

在这里插入图片描述
类似于这种报错信息就被称为异常,那么今天我将为大家着重讲解在代码运行之后出现的异常。

捕获异常

基本语法

当我们程序运行起来的时候,如果出现异常并且这个异常并没有被我们程序员解决的话,那么这个程序便会被强制终止,那么如果我们想要让程序继续执行该怎么办呢?

首先我们需要捕获到异常,在 python 中,这样捕获异常。

try:可能会出现异常的代码
except:如果出现异常执行的代码

前面我们学习了 python文件操作 ,我们都知道当我们以 “r” 的模式打开文件的时候,如果文件不存在,则会报错,当出现这个错误的时候,我们可以使用 “w” 的模式打开文件,如果文件不存在,则会自动创建文件。

try:f = open('test.txt','r')
except:f = open('test.txt','w')

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这就是因为我们的 try 捕获到了异常,然后执行 except 里面的代码,这样就避免了程序的异常终止。

捕获指定类型异常

既然要捕获到指定的异常类型,那么我们就需要知道 python 中有哪些异常类型。

在Python中,常见的异常类型如下:

  1. BaseException:所有异常的基类
  2. SystemExit:程序退出异常
  3. KeyboardInterrupt:用户中断异常(通常由 Ctrl+C 引发)
  4. Exception:大多数异常的基类
  5. StopIteration:迭代器没有更多的值异常
  6. StopAsyncIteration:异步迭代器没有更多的值异常
  7. ArithmeticError:数值计算异常的基类
  8. FloatingPointError:浮点计算异常
  9. OverflowError:数值运算溢出异常
  10. ZeroDivisionError:除数为零异常
  11. AssertionError:断言语句失败异常
  12. AttributeError:对象没有此属性异常
  13. BufferError:缓冲区操作异常
  14. EOFError:文件末尾异常
  15. ImportError:导入模块异常
  16. ModuleNotFoundError:找不到模块异常
  17. LookupError:索引操作异常的基类
  18. IndexError:索引超出序列范围异常
  19. KeyError:字典中找不到键异常
  20. MemoryError:内存溢出异常
  21. NameError:未声明/初始化变量异常
  22. UnboundLocalError:局部变量未初始化异常
  23. OSError:操作系统异常的基类
  24. FileNotFoundError:文件未找到异常
  25. PermissionError:权限错误异常
  26. TypeError:不同类型间的无效操作异常
  27. ValueError:传递给函数的参数无效异常
  28. RuntimeError:运行时异常的基类
  29. NotImplementedError:方法未实现异常
  30. RecursionError:递归调用异常

我们可以根据捕获指定类型异常。

try:print(name)
except NameError:print('程序出现NameError异常')

在这里插入图片描述
但是如果没有捕获到指定类型的异常,程序还是会异常终止。

try:print(name)
except IndexError:print('程序出现NameError异常')

在这里插入图片描述

捕获多个指定类型的异常

在 python 中可以捕获到多种类型的异常,模式跟捕获指定类型的异常类似,只是多种异常类型需要以元组的形式出现。

try:可能会出现异常的代码
except (异常类型1,异常类型2...):如果出现异常执行的代码
try:print(name)
except (IndexError,NameError):print('程序出现IndexError或者NameError异常')

在这里插入图片描述

捕获异常描述信息

当捕获到异常的时候,我们可以适当操作来知道出现了什么异常。

try:可能会出现异常的代码
except (异常类型1,异常类型2...) as 变量:print(变量)如果出现异常执行的代码

as 后面的变量用来接收异常信息。

try:f = open('test.txt','r')
except FileNotFoundError as result:print(result)f = open('test.txt','w')

在这里插入图片描述

捕获所有异常

我们不可能时刻记住 python 的所有异常类型,那么有没有一种方法可以解决呢?当然可以,我们可以使用 Exception 来代表所有异常类型,因为 Exception 类是所有异常类的父类,所有异常类都继承自 Exception

try:可能会出现异常的代码
except Exception:pass
array = [1,2,3,4]
try:print(array[5])
except Exception as result:print(result)print('数组越界')

在这里插入图片描述

else

我们的异常也可搭配着 else 使用,表示如果没有出现异常执行的代码。

try:可能会出现异常的代码
except:pass
else:如果没有出现异常执行的代码
array = [1,2,3,4]
try:print(array[2])
except Exception as result:print(result)print('数组越界')
else:print('恭喜你,程序没有出现异常')

在这里插入图片描述

finally

finally 表示不管你出现还是没有出现异常都会执行的代码,通常用来关闭资源,防止造成资源的浪费。

try:可能出现异常的代码
except:pass
finally:关闭资源
try:f = open('test.txt','r')
except Exception as result:print(result)f = open('test.txt','w')
finally:print('关闭文件')f.close()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

异常的嵌套

我们需要读取文件中的内容,那么首先我们需要判断是否打开成功,如果打开成功,则还需要在读取内容的过程中判断时候出现错误。

try:可能会出现异常的代码try:可能会出现异常的代码except:passfinally:pass
except:pass
finally:pass

为了体现在读取文件过程中出现异常,我们在 cmd 命令行中使用 CTRL+C 来停止读取数据。并且我们需要搭配着 time 模块下的 sleep 方法来使程序执行速度放慢。

import time
try:f = open('test.txt','r')try:while True:con = f.readline()if len(con) == 0:breaktime.sleep(3)print(con)except:print('程序因异常停止读取数据')finally:print('关闭文件')f.close()
except:print('文件不存在')

在这里插入图片描述

这里为什么没有执行 print('文件不存在') 这行代码呢?因为外面的 try 捕获的是
f = open('test.txt','r') 这行代码,这行代码属于正常执行的,并没有出现异常,所以不会执行外层的 except 里面的代码。

自定义异常

在日常生活中,python 为我们提供的异常类型是不能满足生活中的需求的,所以在 python 中我们可以自定义异常,来满足我们的需求。

需要注意的是:我们自定义的异常类需要继承自 Exception 类,并且使用
raise 自定义异常类 来抛出异常。

# 1.自定义异常类
class 自定义异常类(Exception):代码# 设置抛出异常的描述信息def __str__(self):return # 2.抛出异常
raise 自定义异常类()# 3.捕获异常
except Exceptiopn...:

异常类里面通常需要有 __ init ____ str __ 等其他方法来使我们的自定义异常类使用起来更加的方便。

class PasswordError(Exception):def __init__(self,input):self.input = inputdef __str__(self):return f'你输入的密码{self.input}与正确密码不符'def login():password = '987654'while True:try:input_password = input('请输入密码:')if password != input_password:raise PasswordError(input_password)except Exception as result:print(result)else:print('登录成功')breaklogin()

在这里插入图片描述

结语

感谢大家的观看,如果文章有错误,欢迎大家指出!🌹如果你正在学 python 的话,欢迎大家订阅我的 python 学习专栏

在这里插入图片描述

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

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

相关文章

MySQL [环境配置]

MySQL [环境配置] MySQL的下载sqlyog的下载 熟悉老陈的人, 都清楚我不喜欢写这些环境配置的博客 那为啥这次要写一下MySQL的环境配置呢? 因为我被这一个小小的环境配置困扰了很长时间, 淋过雨的人都想为别人撑一把伞, 我不希望我的铁汁们也被这个问题困扰 MySQL的下载 MySQL下…

使用git克隆非自己账号的项目

在地址的中https://或者http://后添加要使用的 账号名项目地址,就会提示输入对应账号的密码,进行克隆。 如果克隆别人的项目,你将别人给你的项目地址克隆,此时身份验证是别人的用户名,这时你输入自己的密码就会验证失败…

在 3ds Max 中对二战球形炮塔进行建模

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 实际上被称为“斯佩里球炮塔”,它被用于二战的B-17和B-24轰炸机。 本教程介绍如何在 3ds Max 中对球形转塔进行建模。建模时,您将使用背景图片作为辅助。首先创建一个低多边形球体。…

thinkphp 上传图片

public function upload_img(){// 读取图片资源// 存储路径$path "uploads/avatar";$file request()->file(background_img);// 存储图片$info $file->rule(uniqid)->move($path);// 存储成功if ($info) {//获取到上传图片的路径名称$name_img $path . …

metersphere数据库SQL断言应用

在使用metersphere的时候,需要查询数据库数据来验证接口是否正常,在查看使用手册时,发现不是很明确,在研究一点时间后,终于明白,在此写下心得。 metersphere使用手册地址:接口测试 - 接口用例操…

界面控件DevExtreme v23.1新版亮点 - 全新的DateRangeBox组件

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…

语义分割混淆矩阵、 mIoU、mPA计算

一、操作 需要会调试代码的人自己改,小白直接运行会出错 这是我从自己的大文件里摘取的一部分代码,可以运行,只是要改的文件地址path比较多,遇到双引号“”的地址注意一下,不然地址不对容易出错 把 calculate.py和 u…

干货 | 一个漏洞利用工具仓库

0x00 Awesome-Exploit 一个漏洞证明/漏洞利用工具仓库 不定期更新 部分漏洞对应POC/EXP详情可参见以下仓库: https://github.com/Threekiii/Awesome-POC https://github.com/Threekiii/Vulhub-Reproduce 0x01 项目导航 ActiveMQ CVE-2015-5254 Apisix CVE-2…

Unreal Engine 与 Blender - 比较指南

虚幻引擎和 Blender 是游戏开发人员中最常用的两种软件,它们在游戏开发工作流程中都有自己的用途和地位。作为进入视频游戏行业的初学者,可能很难从数十种软件中筛选找到最适合您需求的一款。希望本指南能够缓解这一困难并帮助您决定选择哪个软件。 虚幻…

前端面试题-js(三)

31 介绍js有哪些内置对象 Object 是 JavaScript 中所有对象的⽗对象数据封装类对象: Object 、 Array 、 Boolean 、 Number 和 String其他对象: Function 、 Arguments 、 Math 、 Date 、 RegExp 、 Error 32 说⼏条写JavaScript的基本规范 不要在同…

python+pytest接口自动化之测试函数、测试类/测试方法的封装

目录 前言 测试用例封装的一般规则 测试函数的封装 测试类/方法的封装 示例代码 总结 前言 在pythonpytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装&#…

【http-server】http-server的安装、前端使用http-server启动本地dist文件服务:

文章目录 一、http-server 简介:二、安装node.js:[https://nodejs.org/en](https://nodejs.org/en)三、安装http-server:[https://www.npmjs.com/package/http-server](https://www.npmjs.com/package/http-server)四、开启服务:五、http-server参数:【1…

记录stm32c8t6使用TIM4_CH1、TIM4_CH2输出PWM波控制编码电机出现的问题

由于之前是使用PB9、PB7引脚即TIM4_ch3\TIM4_ch4,由于项目更改为c8t6的PB、PB7引脚(TIM4_ch3\TIM4_ch4) 改为配置后发现只有一边的轮子可以转到,明明配置没什么问题,编译也没有报错,最后将pwm的调制模式更改…

抖音seo源码搭建---PHP,vue jquery layui

抖音seo源码,抖音seo矩阵系统源码技术搭建,抖音seo源码技术开发思路梳理搭建 开发思路:抖音seo系统,抖音seo矩阵系统底层框架上支持了ai视频混剪,视频产出,视频AI制作,多账号多平台矩阵&#x…

Java正则表达式MatchResult的接口、Pattern类、Matcher类

Java正则表达式MatchResult的接口 java.util.regex.MatchResult接口表示匹配操作的结果。 此接口包含用于确定与正则表达式匹配的结果的查询方法。可以看到匹配边界,组和组边界,但不能通过MatchResult进行修改。 接口声明 以下是java.util.regex.Matc…

3D开发工具HOOPS 2023 SP2更新:增加了SOLIDWORKS贴花支持!

HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品,专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来,HOOPS通过卓越的3D技术,帮助全球600多家知名客户推动3D软件创新,这些客户包括SolidWorks、SIEMENS、Oracle、Ar…

Transaction事务使用了解

1.功能概述 ​ 在wiki的解释中,事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败(只要有一个失败的操作,就会把其他已经成功的操作回滚)。 ​ 这样的解释还是不够直观,看下…

本地appserv外挂网址如何让外网访问?快解析端口映射

一、appserv是什么? AppServ 是 PHP 网页架站工具组合包,作者将一些网络上免费的架站资源重新包装成单一的安装程序,以方便初学者快速完成架站,AppServ 所包含的软件有:Apache[、Apache Monitor、PHP、MySQL、phpMyAdm…

SOEM_1(笔记,从别的博客文章学的笔记)

目录介绍: doc:帮助文档、 osal:主要是用于符合OSADL和实时进程创建。也就是说:发送EtherCAT数据包不能抖动太大,如果直接使用linux提供的原生线程,可能实时性无法满足。需要对Linux内核打上实时补丁&…

ELK-日志服务【kafka-配置使用】

kafka-01 10.0.0.21 kafka-02 10.0.0.22 kafka-03 10.0.0.23 【1】安装zk集群、配置 [rootes-01 ~]# yum -y install java maven [rootes-01 ~]# tar xf apache-zookeeper-3.5.9-bin.tar.gz -C /opt/[rootes-01 ~]# cd /opt/apache-zookeeper-3.5.9-bin/conf/ [rootes-…