异常的相关知识

news/2024/10/31 3:22:59/
  • 📢博客主页:盾山狂热粉的博客_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 = mls[3]d["age"]
except NameError:print("变量名不存在")
except IndexError:print("索引超出界限")
except KeyError:print("键不存在")

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

ls = []
d = {"name": "鲁班七号"}
try:y = mls[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 / 0try: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 101 # 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 21 try:
----> 2     1 / 03 except:ZeroDivisionError: division by zeroDuring handling of the above exception, another exception occurred:ValueError                                Traceback (most recent call last)
Cell In[8], line 42     1 / 03 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 ZeroDivisionErrorValueError: 这样可以不行
'''

五、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.ppmy.cn/news/424857.html

相关文章

小米6android beam,不只是公交卡!小米手机NFC实用功能盘点

原标题:不只是公交卡!小米手机NFC实用功能盘点 NFC英文全称为Near Field Communication,即近距离通讯技术,也即是我们常说的近场通信。NFC是一种短距高频的无线电技术,工作频率为13.56MHz,与红外线、蓝牙都…

小米十年,难凉热血。回看雷军在演讲中没说的人和事

在小米过去发展的十年,有很多关键人物和关键事件都扮演了重要角色,不过并没有在演讲中被提及。比如,造手机绕不开的钱晨和周光平、惹不起的三星、以及让雷军爱恨的黄章。 对软件测试感兴趣可以加入313782132,群内可以免费领取学习…

小米10开始抓取日志怎么关闭_日志MIUI 10 9.5.22 内测更新资讯

↑ 点击上方『关注米柚更新』关注我们 *原创文章,未经允许禁止抄袭转载。侵权必究 ! *有更好的补充都会在评论区“置顶”,请养成评论/看评论区的习惯。 『第28期』 - 恭喜小米8 、MIX 3 用户喜提“DC调光” ( 设置 - “防闪烁模式” ),此功能…

小米的疯狂进化论

前记: 家中的小米设备越来越多, 小米电视,小米路由器,小米扫地机器人,小米电动牙刷,小米空气净化器, 小米智能运动鞋. 同时小米马桶, 激光电视机, 空调刚刚发布, 感觉小米完全占领了家庭. 我唯独缺少了小米手机是因为原来的小米手机颜值确实过低, 不过这一年来,小米…

《惢客创业日记》2018.10.26(周五) 健康=小米MIX3

今天,接着把昨天没有写完的日记补完,重点说说我和这个中医关于惢客的话题。虽然他不懂互联网,对手机的了解程度也仅仅停留在使用微信的层面。但是,他的很多问题还是很犀利的。   他的第一个问题是:“小曹&#xff01…

小米Mix概念手机火了,雷军又在玩什么新套路?

10月25日的小米Note 2发布会上,小米隆重发布小米Note 2,并邀请梁朝伟代言,万万没想到的是,昨天发布会上没有被隆重介绍的小米Mix概念手机,反而成为大众关注焦点,今天起床朋友圈和微信群还在讨论它&#xff…

10款小而美的macOS应用

作为Mac用户,相信大多数人对美都是有一定追求的,我们肯定不希望在Mac上运行一些界面不怎么好看的App,所以今天Mac毒给大家推荐10款小而精美的App。 1. Pap.er Pap.er是一款专为Mac设计的精美壁纸应用,支持4K、5K壁纸设置&#x…

4EVERLAND双周报(2023年5月22日-2023年6月4日)

今天是我们见面的另一天——又一期4EVERLAND双周报! 我们最新的报告旨在让您了解我们最近的进展和愿望。如果您错过了我们上期的内容,请在此处查找。 此外,我们谨提醒您订阅我们的Medium和Twitter帐户以接收我们的最新更新。 事不宜迟&…