在学习编程语言的时候,自己起初对异常的捕获与处理不是特别的注重,在后来发现异常捕获非常的重要,如下图,程序发生了异常,程序员没有对异常进行捕获,将密密麻麻给到使用产品的客户看到,在用户的角度看,那还不一头雾水...直接口吐芬芳了

一、异常捕获的框架

针对异常捕获有几种组合使用,针对于不同的场景使用不同的方法,在介绍组合使用的方法之前,先说一下异常捕获的框架

第一种框架:

try:# 此处放你觉得将会出现异常的代码,放这里
except 异常类型 as 变量:print(变量)

第二种框架:这里不写异常类型和变量,也是可以的,因为 python 解释器内部有一个基类(object),就是异常的基类 Exception ,系统会自动根据你出现的异常类型,去给你打印对应的异常内容

try:# 此处放你要可能要出现异常的代码
except:   # except 后面也可以不写异常类型和变量print()

异常类型有很多种,例如:

NameError、ZeroDivisionError、list index out of range
  • 变量没有定义出现的异常
  • 除数不能为0的异常
  • 使用索引去取值的时候,超过了索引的范围的异常

针对于第一种变量没有定义的异常,这里我在 pycharm 中直接输入了一个字母 a,很显然,我没有定义变量 a 然后就去运行就报出了异常

二、try-except 组合

  • try-except
  • try-except-else
  • try-except-finally

第一种组合:try-except

# 当变量没有定义的异常
try:a                       # try 与 except 之间写可能会出现异常的代码
except NameError as s:      # NameError 为异常的类型print(s)

如下图输出的为:异常类型所对应的类型

-当除数不为0的时候,这里要理解,当没有异常的时候,只会执行 try 里面你写的正常的代码,而不会去执行 except 里面的代码,所以不必去担心,当我程序运行正常,也会执行 except 里面的代码,而对执行的结果有影响

# 当除数不能为0的异常
try:a = 0b = 9c = a / b                 # 当没有异常的时候,只会执行 try 里面的代码,而不会执行 except 里面的代码print(c)
except ZeroDivisionError as zero:print(zero)

上面运行的结果如下图,输出了变量 c 的结果,程序没有异常,所以就没有执行except

-当除数为0的情况,有异常的时候

第二种组合:try-except-else 这种组合用的较少

# try-except-else 结构,当没有异常的时候,就会执行 else 里面的代码
try:a = [1,2,3,4,5]b = a[2]
except IndexError as index_a:print(index_a)
else:print(b)

输出的结果为:3,因为没有异常,所以也就没有执行 except 里面的代码,也就执行了 else ,这种其实就跟我们正常的 try-except 组合很像,只不过这里单独 加了一个 else 关键字而已,让其输出结果,没有什么特别之处

第三种组合:try-except-finally  使用的次数很多,这里多加了一个保留字 finally 就是不管是否有异常,都会执行 finally 里面的代码,使用场景就是我可能在日常写代码的时候,我知道某一个地方可能会出现异常,但是我不管里面是否真正的出现异常,我都继续执行其它的代码

# try-except-finally 结构,不管代码是否有异常,最后都会执行 finally 里面的代码
try:a = [1,2,3,4,5]b = a[2]
except IndexError as index_b:print(index_b)
finally:print("列表索引超出了范围")

- 没有异常的时候,输出 finally 里面的代码

- 有异常的时候

# 1.try-except-finally 结构,不管代码是否有异常,最后都会执行 finally 里面的代码
# 2.except 后面也可以不写异常类型,因为系统默认认为后面的错误类型是 Exception,这是一个基类,包含了所有的出错类型
try:a = [1,2,3,4,5]b = a[10]
except:print("list index out of range")
finally:print("列表取值的索引值超出了范围")

- 有异常的时候,也执行了 finally 里面的代码,注意,这里使用的是第二种结果,也就是一开始所讲的,except 后面没有跟保留字

第四种组合:try-except-except  当要写的代码中可能要出现两个异常的时候,这里就可以再添加一个 except 保留字,但是,这里只会执行第一个 except 里面的内容,如下,当除数为0的异常,我自定了一个打印内容:除数不能为0,却没有执行

"""
如下代码,有两个不同类型的异常,1.变量未定义,2.除数不能为0,这两处可能会出现异常
"""
try:ab = 0c = 9d = c / b                           # 注意:当有多个 except 的时候,这里只会执行第一个 except 里面的代码,其余的不会执行,但是这样不会标红
except NameError as name:               # 第一种写法,except 后面跟异常的类型print(name)
except:                                 # 第二种写法,except 后面不跟异常类型,让其使用默认的 Exception 类,这是一个基类,包含了所有的出错类型print("除数不能为0")

执行的结果如下图

今日的分享,到此结束,感谢,fighting!加油,加油,加油

python异常的捕获与处理(重要)相关推荐

  1. python——异常(1),捕获特定异常

    python--异常(1),捕获特定异常 参考文章: (1)python--异常(1),捕获特定异常 (2)https://www.cnblogs.com/kekefu/p/12317986.html ...

  2. python抛出异常 后如何接住,Python 异常的捕获、异常的传递与主动抛出异常操作示例...

    本文实例讲述了Python 异常的捕获.异常的传递与主动抛出异常操作.分享给大家供大家参考,具体如下: 异常的捕获 demo.py(异常的捕获): try: # 提示用户输入一个整数 num = in ...

  3. python异常捕获_Python 异常的捕获、异常的传递与主动抛出异常操作示例

    本文实例讲述了Python 异常的捕获.异常的传递与主动抛出异常操作.分享给大家供大家参考,具体如下: 异常的捕获 demo.py(异常的捕获): try: # 提示用户输入一个整数 num = in ...

  4. Python异常捕获及自定义异常类

    Python异常捕获及自定义异常类 一.什么是异常? 异常是一个与业务逻辑无关的BUG,一个潜在错误或者网络错误事件等,如:尚未实现的函数,缩进错误,Python语法错误等.该事件可能会在程序执行过程 ...

  5. python异常(概念、捕获、传递、抛出)

    python异常(概念.捕获.传递.抛出) 参考文章: (1)python异常(概念.捕获.传递.抛出) (2)https://www.cnblogs.com/xiangribai/p/8594392 ...

  6. 仅需6道题轻松掌握Python异常捕获 | Python技能树征题

    仅需6道题轻松掌握Python异常捕获 | Python技能树征题 0. 前言 1. 第 1 题:在单元测试中测试异常 2. 第 2 题:多个异常的处理 3. 第 3 题:捕获所有异常 4. 第 4 ...

  7. python异常数据处理_Python 异常处理和捕获信息教程

    在学习了Python的基础数据类型和它们的相关操作方法之后,要学习的另外一个重点知识是 Python异常. 我们经常在编写程序和调试代码的过程中,有发生一些错误,为了处理和提醒用户这些错误,Pytho ...

  8. Python异常「1」(异常的概念、异常捕获、异常的传递、自定义异常)

    欢迎关注博主 python老鸟 或 前往 『Python自学网』, 从基础入门免费课程开始,逐步深入学习python全栈体系课程,适合新手入门到精通全栈开发. 免费专栏传送门:<Python基础 ...

  9. python异常捕获

    python异常捕获 文章目录 python异常捕获 ①捕捉一个异常 ②捕捉多个异常 ③Exception捕捉所有异常 ④raise主动触发异常 ④ try...except...else...fin ...

最新文章

  1. DSP集成开发工具CCS的Git工具使用说明(二)
  2. 打开word文档提示文件未找到_word图片显示:如何打开多图文档不再卡慢
  3. go int 转char_Go语言的奇特语法,你怎么看?
  4. Fatal Python error: Cannot recover from stack overflow.(嵌套层数过多超出限制)
  5. 现在就开始使用AngularJS的三个重要原因
  6. outdated: 3.Adding Color
  7. day12-nginx
  8. 什么是 CD 管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!
  9. 学校计算机社团都干些什么,计算机社团管理制度
  10. 三角函数的思维导图(上)
  11. sketchup 计算机配置,草图大师2020对电脑配置要求
  12. 【移动网络】[5G 核心网络架构] 5GC: Architecture
  13. Polyman 初使用-01
  14. 基于改进YOLOv5的挖机铲斗缺陷检测系统(源码&教程)
  15. 必看!Java 学习路线
  16. 批量新建AD的ou和user,实例教程
  17. Table ‘ambari.members‘ doesn‘t exist 解决方法
  18. 2018年上海后半年JAVA软件工程师面试真题
  19. 工控机主机该怎么加固
  20. c语言免杀花指令大全,免杀花指令

热门文章

  1. C++ 函数模板的使用
  2. tplink 智能dhcp服务器,TP-LINK路由器当DHCP服务器操作步骤
  3. 弹性布局多列换行居左布局
  4. 小米路由器怎么设置?小编教你设置小米路由器的方法
  5. OpenCV透视变换示例
  6. 如何去除QTableWidget表格选中Item时的虚线框?
  7. powershell:wsus清理已经下载的补丁
  8. Android自定义view变色字体实现
  9. HxD(十六进制编码处理工具) 1.7中文版
  10. 学习二十大奋进新征程线上知识答题活动回顾