Python中异常的捕获与处理详解

 更新时间:2023年08月16日 10:46:28   作者:史上最强踩坑王  
这篇文章主要介绍了Python中异常的捕获与处理详解,调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正,需要的朋友可以参考下

异常是什么

Python异常是指在程序运行中所产生的错误,即代码在无法正常执行的情况下就会产生异常。

这个错误可以是Python内置的错误类型,也可以是开发者自定义的错误类型。

一、异常捕获的框架

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

第一种框架:

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 = 0
    b = 9
    c = 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:
    a
    b = 0
    c = 9
    d = c / b                           # 注意:当有多个 except 的时候,这里只会执行第一个 except 里面的代码,其余的不会执行,但是这样不会标红
except NameError as name:               # 第一种写法,except 后面跟异常的类型
    print(name)
except:                                 # 第二种写法,except 后面不跟异常类型,让其使用默认的 Exception 类,这是一个基类,包含了所有的出错类型
    print("除数不能为0")

执行的结果如下图

到此这篇关于Python中异常的捕获与处理详解的文章就介绍到这了,更多相关Python异常捕获处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3.8官网文档之类的基础语法阅读

    Python3.8官网文档之类的基础语法阅读

    类提供了一种组合数据和功能的方法,今天通过本文给大家分享Python3.8官网文档之类的基础语法阅读知识,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • Django搭建项目实战与避坑细节详解

    Django搭建项目实战与避坑细节详解

    这篇文章主要给大家介绍了关于Django搭建项目实战与避坑细节的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题

    解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题

    这篇文章主要介绍了解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python异常信息的不同展现方法总结

    Python异常信息的不同展现方法总结

    在日常开发的过程中,当代码报错时,我们通常要不断打印、阅读traceback提示信息,来调试代码,这篇文章介绍了如何实现一个Exception Hooks,使得traceback模块的提示信息更加精确;同时还介绍了一些第三方库,这些库也提供了Exception Hooks的功能
    2022-11-11
  • 如何利用Pandas删除某列指定值所在的行

    如何利用Pandas删除某列指定值所在的行

    工作中通常会遇到大量的数据集需要处理,其中的一项就是将含有某些数据的行删除掉,下面这篇文章主要给大家介绍了关于如何利用Pandas删除某列指定值所在的行的相关资料,需要的朋友可以参考下
    2022-04-04
  • Python opencv图像膨胀与腐蚀处理实例探究

    Python opencv图像膨胀与腐蚀处理实例探究

    这篇文章主要介绍了Python opencv图像膨胀与腐蚀处理实例探究
    2024-01-01
  • Ubuntu16.04 安装多个python版本的问题及解决方法

    Ubuntu16.04 安装多个python版本的问题及解决方法

    Ubuntu16.04自带python2.7与python3.5,Ubuntu 官方 apt 库中还未收录 python 3.8,因此添加 deadsnakes PPA 源安装python3.8,否则会出现报错,接下来通过本文给大家介绍Ubuntu16.04 安装python的问题,一起看看吧
    2021-09-09
  • django orm模块中的 is_delete用法

    django orm模块中的 is_delete用法

    这篇文章主要介绍了django orm模块中的 is_delete用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 如何安装并在pycharm使用selenium的方法

    如何安装并在pycharm使用selenium的方法

    这篇文章主要介绍了如何安装并在pycharm使用selenium,本文给大家提到了selenium安装并导入pycharm的教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python3中多线程编程的队列运作示例

    Python3中多线程编程的队列运作示例

    这篇文章主要介绍了Python3中多线程编程的队列运作示例,文中用一个简单的例子展示了Python下尝试多线程时队列的进站出站是如何运作的,需要的朋友可以参考下
    2015-04-04

最新评论