异常的相关知识

news2024/11/17 7:46:50
  • 📢博客主页:盾山狂热粉的博客_CSDN博客-C、C++语言,机器视觉领域博主
  • 📢努力努力再努力嗷~~~✨

💡大纲

⭕总结了python中所有可能的异常情况,有异常不一定是坏事,有提醒作用

一、常见异常

💡可以查看python内置异常大合集

  • 除0运算:ZeroDivisionError
  • 找不到可读文件:FileNotFoundError
  • 值错误:ValueError
  • 索引错误:IndexError
  • 类型错误:TypeError
  • 使用一个未被定义的变量:NameError
  • 试图访问字典里不存在的键:KeyError

⚠️当异常发生的时候,如果不预先设定处理方法,程序就会中断

二、处理异常:提高程序的稳定性和可靠性

(一)try_except

💡如果try内代码块顺利执行,except不被触发;如果try内代码块发生错误,执行except里的代码

👉通过预判的方式来处理异常,一般来说会预判到出现什么错误,预判错误的话还是会中止程序

x = 10
y = 0
try:
    z = x/y
except ZeroDivisionError: 
    print("0不可以被除!")    

 ⚠️只预判一个异常,很难预判到,所以就可以多写几个

ls = []
d = {"name": "鲁班七号"}
try:
    y = m
    ls[3]
    d["age"]
except NameError:
    print("变量名不存在")
except IndexError:
    print("索引超出界限")
except KeyError:
    print("键不存在")

⚠️ 就算多写几个,还是很难预判到是什么类型的错误,可以使用Exception

ls = []
d = {"name": "鲁班七号"}
try:
    y = m
    ls[3]
    d["age"]
except Exception:
    print("出错啦") # 有错就报错

⚠️ 虽然知道了错误,但是不知道是哪种类型的错误,可以使用as来捕获异常的值

ls = []
d = {"name": "鲁班七号"}
# y = x
try:
    y = m
    # ls[3]
    # d["age"]
except Exception as e: # 虽不能获得错误具体类型,但可以获得错误的值
    print(e) # name 'm' is not defined

(二)try_except_else

💡如果try 模块执行,则else模块也执行(更像是对于try模块的继续表达或后续声明)

try:
    with open("测试文件.txt") as f:
        text = f.read()
except FileNotFoundError:
    print("找不到该文件")
else:
    for s in ["\n", ",", "。", "?"]: # 去掉换行符和标点符号
        text = text.replace(s, "")
    print("该文件共由{}个字组成。".format(len(text)))

(三)try_except_finally

💡不论try模块是否执行,finally最后都执行

👉finally一般都是执行收尾工作,比如文件的关闭

ls = []
d = {"name": "鲁班七号"}
try:
    y = m
except Exception as e:
    print(e)
finally:
    print("哎~我一直都在")

⭕总结

 

三、异常的嵌套

💡 看内部异常与外部异常哪个先发生,若外部异常先发生直接跳过内部异常,执行finally语句

try:
    try:
        520 + "FishC"
    except:
        print("内部异常")
    1 / 0
except:
    print("外部异常")
finally:
    print("收尾工作")
'''
内部异常
外部异常
收尾工作
'''
try:
    1 / 0
    try:
        520 + "FishC"
    except:
        print("内部异常")
except:
    print("外部异常")
finally:
    print("收尾工作")
'''
外部异常
收尾工作
'''

四、raise语句 

(一)主动引发异常

💡在上述情况下的异常都是采用被动防御的姿态,可以使用raise语句来进行“自爆”,这种情况不能引爆一个不存在的异常类型

raise ValueError("值不正确")
'''
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[5], line 1
----> 1 raise ValueError("值不正确")

ValueError: 值不正确
'''
raise FishCError("小甲鱼")
'''
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[7], line 10
      1 # raise ValueError("值不正确")
      2 '''
      3 ---------------------------------------------------------------------------
      4 ValueError                                Traceback (most recent call last)
   (...)
      8 ValueError: 值不正确
      9 '''
---> 10 raise FishCError("小甲鱼")

NameError: name 'FishCError' is not defined
'''

(二)偷天换日:用一个异常来替换真正的异常

💡这种情况python其实会自己识别,并说明是哪种异常

try:
    1 / 0
except:
    raise ValueError("这样可不行")
'''
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[8], line 2
      1 try:
----> 2     1 / 0
      3 except:

ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
Cell In[8], line 4
      2     1 / 0
      3 except:
----> 4     raise ValueError("这样可不行")

ValueError: 这样可不行
'''

(三)异常链

raise ValueError("这样可以不行") from ZeroDivisionError
'''
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
ZeroDivisionError: 

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
Cell In[9], line 1
----> 1 raise ValueError("这样可以不行") from ZeroDivisionError

ValueError: 这样可以不行
'''

五、assert语句 

💡能主动引发异常,但是assert语句只能引发一个叫AssertionError的异常

👉多用于调试的时候,可以代替if语句的作用

s = "FishC"
assert s == "FishC"
assert s != "FishC"

六、利用异常来实现goto

try:
    while True:
        while True:
            for i in range(10):
                if i > 3:
                    raise # 这里相当于goto语句
                print(i)
            print("跳过")
        print("跳过")
    print("跳过")
except:
    print("这里")
'''
0
1
2
3
这里
'''

 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

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

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

相关文章

Midjourney命令列表Command List介绍

您可以通过键入命令与Discord上的Midjourney Bot进行交互。命令可以用来生成图像、更改默认设置、监看用户信息以及执行其他有用的任务。 Midjourney 命令可以在任何Bot Channel中使用,在允许 Midjourney Bot 运行的私有 Discord 服务器上使用,或者在与…

Java项目开发基本数据类型与封装数据类型的选择

问题 Java项目开发基本数据类型与封装数据类型的选择 详细问题 关于基本数据类型与封装数据类型的区别,作为面试经典题目已被熟知,但是,项目开发时,对于一个变量,是选择基本数据类型,还是封装数据类型&a…

【SpringBoot】SpringBoot案例 | Web后端开发

黑马2023JavaWeb的B站视频,还可以,学的大部分都是有用的东西。没有一上来还JDBC。 新建项目、更改application.properties配置: spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.datasource.urljdbc:mysql://localhost:…

定时任务执行时间设置详解

目录 前提实践举例定时任务执行时间设置详解定时器包含的子表达式和对应子表达式允许的值子表达式中特殊字符含义的解释和相应示例 前提 一般在处理业务过程中,都需要在特定的时间点执行特定的任务,尤其是业务复杂且执行时间很长,业务之间关…

java中的时间

一、JDK7的类 (1)Date 时间 (2)SimpleDateFormat 格式化时间 (3)Calendar 日历 格林尼治时间(Greenwich Mean Time),简称GMT。 目前的世界标准时间(UTC)以替换…

C++的友元函数、友元类、内部类

目录 1.友元函数 1.定义 2.注意 2.友元类 1.定义 3.内部类(Java喜欢用,C不怎么用) 1.定义 特性: 1.友元函数 1.定义 1.友元函数可访问类的私有和保护成员,但不是类的成员函数。 2.友元函数不能const修饰 3.…

Rust语言从入门到入坑——(4)Rust语法(上)

文章目录 0 引入1、基础语法1.1、变量1.2、常量1.3、重影 2、数据类型2.1、整形2.2、浮点型2.3、其他2.注释与打印2.1 注释2.2、打印 3、总结 0 引入 在这里我们需要介绍Rust语法,一共分三部分,第一部分是基础语言,和C语言类比,如…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目,检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

总结902

目标规划: 月目标:6月(线性代数强化9讲,考研核心词过三遍) 周目标:线性代数强化5讲,英语背3篇文章并回诵,检测 每日规划 今日已做 1.背诵前21篇短文,默写了10篇文章。…

智能视频无损放大-Topaz Video AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Video AI。 小编在很早之前也有了解过Topaz系列的软件,都是通过人工智能处理的,对小白新手们很适用,由于使用人工智能方面的软件或程序对硬件要求都比较高,因…

离散数学题目收集整理练习(期末过关进度70%)

✨博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 🌟博主的其他文章&…

Linux运维监控学习笔记2

Zabbix监控本机: 配置->主机->将Zabbix Server的状态开启。 然后我们还需要在这台机器上安装agent。agent安装在被监控端,收集数据,与监控服务器交互。 # 列出系统上面所有软件名称 rpm -qa |grep zabbix-agent zabbix-agent-3.4.15-…

hello算法笔记之栈与队列

一、栈 遵循先入后出(First In, Last Out)原则的线性数据结构。 只能在栈顶添加或删除元素 链表实现形式: ①栈以链表形式实现: ②以数组形式实现 二、队列 遵循先入先出(First In, First Out)规则的线…

使用WinDbg分析Windows dump文件方法

需要使用WinDbg工具来分析windows系统产生的dump文件,此工具属于Windows SDK的一个组件,在微软官方网站可以下载(链接)。 在安装Windows SDK的过程中,可以选择只安装WinDbg(Debugging Tools for Windows&a…

数据结构——图

文章目录 **一 图的基本概念****1 定义** **二 图的存储及基本操作****1 邻接矩阵法****2 邻接表法****3 十字链表****4 邻接多重表****5 图的基本操作** **三 图的遍历****1 广度优先搜索BFS****2 深度优先搜索DFS****3 图的遍历与连通性** **四 图的应用****1 最小生成树****…

源码编译安装LAMP

文章目录 一.Apache1.什么是apache2.apache的主要特点3.apache的软件版本4.编译安装优点 二.LAMP简介与概述1.LAMP平台概述2.构建LAMP平台顺序3.各组件的主要作用 三.LAMPDISCUZ论坛搭建1.部署Apache1.1 下载apache相关安装包放入服务器中1.2 解压apache的安装进行安装1.3 编译…

SF授权系统源码 V3.7全开源无加密版本

🎉 有需要的朋友记得关赞评,文章底部来交流!!! 🎉 ✨ 源码介绍 2023全新SF授权系统源码 V3.7全开源无加密版本。网站搭建很简单,大致看来一下应该域名解析后上传源码解压,访问域名/i…

如何构建LAMP平台:Apache,MySQL,PHP

如何构建LAMP平台:Apache,MySQL,PHP 一、Apache网站服务:1. Apache的起源(多系统兼容):2.重要特点:3.软件版本:4.编译安装呢http服务器: 二、LAMP简介与概述&…

家中群晖NAS遇到断电如何自动关机

群晖NAS遇到断电时如何自动关机 前置条件实现功能的想法具体实施的步骤开启群晖Linux的SSH登陆安装Putty或是Xshell远程登陆上群晖创建计划任务 前置条件 需要一台UPS(品牌功能不限,只需续航5分钟以上就可以) 实现功能的想法 通过监控网卡…

【备战秋招】每日一题:4月8日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第二题-必经之路 在线评测链接:P1167 题目内容 塔子哥的班主任最近组织了一次户外拓展活动,让班里的同学们一起去爬山。在路上,塔子哥看到了一棵漂…