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

2023-11-03

在这里插入图片描述

前言

在编程的世界中,我们常常会面对各种各样的错误和异常情况。尤其当我们使用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:
		pass
	finally:
		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:
                break
            time.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 = input

    def __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('登录成功')
            break

login()

在这里插入图片描述

结语

感谢大家的观看,如果文章有错误,欢迎大家指出!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

探索Python异常:让程序不再崩溃! 的相关文章

随机推荐

  • 【论文学习】YOLOv3:An Incremental Improvement

    论文 YOLOv3 源代码 pjreddie com yolo 视频 https youtu be MPU2HistivI 1 Abstract 作者对YOLO进行了进一步的更新 做了一些小设计更改让其表现更好 YOLOv3比YOLOv2相
  • 【OS】IO系统——设备管理

    操作系统的设备管理 IO系统 一 啥是IO系统 操作系统是一种特殊的管理系统 管理与计算机相关的各种资源 往大了说 包括硬件资源和软件资源 细化了说 包括计算资源 内存资源 文件资源 设备资源 本文主要讲解设备管理的相关内容 1 OS管理的
  • 一分钟总结Spring的IOC和DI

    IOC Inverse of control 控制反转 IoC 控制反转 就是将程序中原来 new 对象 交给spring创建 从spring工厂获取对象 使用spring来负责控制对象的生命周期和对象间的关系 Spring所倡导的开发方式
  • 数据库视图的基本概念及作用

    一 视图简介 视图是从一个或几个基本表 或视图 中导出的虚拟的表 在系统的数据字典中仅存放了视图的定义 不存放视图对应的数据 视图是原始数据库数据的一种变换 是查看表中数据的另外一种方式 可以将视图看成是一个移动的窗口 通过它可以看到感兴趣
  • vcruntime140.dll丢失的解决方法

    vcruntime140 dll是vc运行库中的链接库文件 一般它会出现的状况就是系统提示dll丢失 这样的情况一般出现在游戏应用或者软件程序中 且会导致程序无法正常运行 只要下载此补丁 根据下面的步骤进行操作即可解决问题若你的电脑不小心丢
  • 前端常用js加密方法

    这里罗列前端常用的js加密方法 base64加密
  • 计算机网络知识点(网络层)

    文章目录 重要内容 4 1 网络层提供的两种服务 4 2 网际协议IP 4 2 1 虚拟互联网络 4 2 2 分类的IP地址 4 2 3 IP地址与硬件地址 4 2 4 地址解析协议ARP 4 2 5 IP数据报的格式 4 2 6 IP层转
  • 关于Android证书MD5获取

    Android打包证书获取MD5值 最近在学习Android开发 在打包成apk时发现需要一个证书文件 于是就随手生成了一个证书文件 在后期使用百度人脸识别SDK时发现需要用到证书文件的MD5值 按照百度说明文档以及网上大多数查看证书文件的
  • Centos7安装配置nginx

    1 前言 在进行nginx安装前 考虑到本博客针对很多新手朋友我决定还是先介绍一些nginx知识 这样更加有利于各位读者朋友对nginx的理解 对后续学习也有很大帮助 介绍 Nginx engine x 是一个高性能的HTTP和反向代理we
  • Android jni报错No implementation found

    2022 04 18 20 25 52 738 28123 28123 com example insectdetector E AndroidRuntime FATAL EXCEPTION main Process com example
  • JS数组和方法【一】

    冒泡排序 数组排序 冒泡排序 冒泡排序 是一种算法 把一系列的数据按照一定的顺序进行排列显示 从小到大或从大到小 var arr 2 3 4 1 2 for var i 0 i lt arr length i 外层循环管趟数 for var
  • IDEA 无法显示 Services,Run Dashboard 的解决方法

    IDEA 无法显示 Run Dashboard 的解决方法 步骤 1 新版的 idea 把 dashboard 已经整合到 service 里面了 但是操作步骤依然是不变的 步骤 2 如果你连 services 都看不到 双击一下 shif
  • ssh框架基于java的爱心捐助平台源码+论文第三稿+查重报告+代码讲解视频(包安装,已降重)

    项目名称 ssh框架基于java的爱心捐助平台源码 效果视频 ssh框架基于java的爱心捐助平台源码 系统说明 功能模块设计 1 系统登录 主要分为管理员和普通用户 由数据库判断输入的账户信息是那种角色 在判断验证的账号和密码匹配后方可正
  • 孔明六曜星图生图总结

    图生图功能 1 图生图 就是文生图加张参考图 2 绘图 就是图生图加上手绘 3 局部重绘 就是只画图生图中的一部分功能 4 局部重绘 手涂蒙版 就是图生图的一部分功能加上绘图 5 上传蒙版 就是局部重绘加上PS的蒙版处理 规定边界 6 批量
  • mybatis工作原理

    1 基本原理 首先看一段JDBC代码 Class forName com mysql jdbc Driver String url jdbc mysql localhost 3306 localdb Connection con Drive
  • 从停产到宣布倒闭,Kuri 见证了一段家庭机器人兴衰史

    转自 https new qq com omn 20180824 20180824A1RPR5 html 曾经勾勒的美好蓝图说没就没了 shenzhenware 上个月 家庭机器人制造商 Mayfield Robotics 曾宣布 因母公司
  • 高可用集群软件Heartbeat介绍

    一 Heartbeat的定义 Heartbeat 项目是 Linux HA 工程的一个组成部分 也是目前开源HA项目中最成功的一个例子 Linux HA的全称是High Availability Linux 这个开源项目的目标是 通过社区开
  • 【微信小程序】background-image设置背景图片不显示的解决办法

    相关代码如下
  • 芯片科技科普2芯片分类

    02芯片分类 这么多芯片 有没有什么系统的分类方式呢 其实芯片的分类方式有很多种 按照处理信号方式可以分成 模拟芯片 数字芯片 信号分为模拟信号和数字信号 数字芯片就是处理数字信号的 比如CPU 逻辑电路等 模拟芯片是处理模拟信号的 比如运
  • 探索Python异常:让程序不再崩溃!

    文章目录 前言 什么是异常 捕获异常 基本语法 捕获指定类型异常 捕获多个指定类型的异常 捕获异常描述信息 捕获所有异常 else finally 异常的嵌套 自定义异常 结语 前言 在编程的世界中 我们常常会面对各种各样的错误和异常情况