python中异常的传播详解

 更新时间:2022年01月27日 16:26:05   作者:繁华似锦Fighting  
大家好,本篇文章主要讲的是python中异常的传播详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

1、异常的传播

当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播。如果函数中没有对异常进行处理,则异常会继续向函数调用者传播。如果函数调用者处理了异常,则不再传播,如果还没有处理,则继续向他的调用者传播,直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息到控制台。所以异常的传播我们也称之为抛出异常。

异常传播示例如下:

def fn1():
    print('Hello fn')
    print(10/0)

def fn2():
    print('Hello fn2')
    fn()

def fn3():
    print('Hello fn3')
    fn2()

fn3()

输出结果:

说明输出结果:

当我们调用fn3()方法的时候,会先输出Hello fn3,再向下执行调用fn2()方法,以此类推到fn1()方法中。可以看到上边有三条输出语句。

当执行到fn1()方法中print(10/0)语句,出现了ZeroDivisionError异常,而fn1()方法中没有处理该异常,则向他的调用者抛出这个异常,抛给了fn2()方法,以此类推,知道fn3()方法抛给了全局作用域中的调用者,异常依然没有被处理。

最后Python的解释器会把这个异常显示在控制台中。

所以我们看到异常结果中,一行报错,向上抛了好几次。

例如:全局作用域中的代码有异常没有处理的话,就直接显示在控制台中了。

print(10 / 0)

输出结果:

2、如何处理异常

在异常抛出后的任何一个调用者处理该异常都可以。

异常处理如下:

def fn1():
    print('Hello fn')
    print(10 / 0)

def fn2():
    print('Hello fn2')
    fn1()

def fn3():
    print('Hello fn3')
    fn2()

try:
    fn3()
except :
    print("异常我已经处理过了。")
"""
输出结果:
Hello fn3
Hello fn2
Hello fn
异常我已经处理过了。
"""
# 我在全局作用域的地方进行了异常处理,
# 也可以在其他地方进行处理,不管在哪里处理,
# 最后都不会把错误抛向控制台的。

提示:

当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中。而异常传播时,实际上就是将异常对象抛给了调用者。

而不同的错误,会对应着不同的异常对象(也就是前边说的异常类型)。

如何查看Python异常对象?

在Python的本地文档中,找到[The Python Standard Library] —> [Built-in Exceptions],里面全是我们Python中的异常对象以及说明。

如下图所示:

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

相关文章

  • Python利用柯里化实现提高代码质量

    Python利用柯里化实现提高代码质量

    柯里化(Currying)是函数式编程中的一个重要概念,它可以将一个多参数函数转化为一系列单参数函数的组合,本文将详细解释什么是柯里化,如何在Python中实现柯里化,感兴趣的可以了解下
    2024-01-01
  • Python 如何优雅的将数字转化为时间格式的方法

    Python 如何优雅的将数字转化为时间格式的方法

    这篇文章主要介绍了Python 如何优雅的将数字转化为时间格式的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • python中shapefile库读取shapefile文件信息

    python中shapefile库读取shapefile文件信息

    本文主要介绍了python中shapefile库读取shapefile文件信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python从入门到精通之条件语句和循环结构详解

    Python从入门到精通之条件语句和循环结构详解

    Python中提供了强大而灵活的条件语句和循环结构,本文将从入门到精通地介绍它们的使用方法,并通过相关代码进行讲解,希望对大家深入了解Python有一定的帮助
    2023-07-07
  • Python读写csv文件的超详细步骤

    Python读写csv文件的超详细步骤

    python提供了大量的库,可以非常方便的进行各种操作,下面这篇文章主要给大家介绍了关于Python读写csv文件的超详细步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 用Python定时发送天气邮件

    用Python定时发送天气邮件

    大家好,本篇文章主要讲的是用Python定时发送天气邮件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 解决python中0x80072ee2错误的方法

    解决python中0x80072ee2错误的方法

    在本篇文章中小编给大家分享的是关于解决python中0x80072ee2错误的方法,需要的朋友们可以参考下。
    2020-07-07
  • 深入理解Python 代码优化详解

    深入理解Python 代码优化详解

    本文初步探讨了 python 常见的性能优化技巧以及如何借助工具来定位和分析程序的性能瓶颈,并提供了相关可以进行性能优化的工具或语言,希望能够更相关人员一些参考。
    2014-10-10
  • Python实现企业微信机器人每天定时发消息实例

    Python实现企业微信机器人每天定时发消息实例

    这篇文章主要介绍了Python实现企业微信机器人每天定时发消息实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python基础学习之深浅拷贝问题及递归函数练习

    Python基础学习之深浅拷贝问题及递归函数练习

    在实际工作中,经常涉及到数据的传递。这篇文章主要为大家介绍了Python的一些基础学习:深拷贝与浅拷贝问题、递归函数的练习,需要的朋友可以参考一下
    2021-12-12

最新评论