Python语法 raise ... from 用法示例详解

 更新时间:2025年07月29日 09:20:13   作者:上海-悠悠  
Python中raise语句用于主动抛出异常,try-except捕获后可重抛,raise...from...关联异常链,from None则断开,影响错误信息显示,下面给大家介绍Python语法 raise ... from 用法示例,感兴趣的朋友一起看看吧

前言

当程序出现错误时,系统会自动触发异常。Python 也允许程序自行引发异常,自行引发异常使用 raise 语句来完成。

  • 使用 raise 抛出新的异常
  • 使用 raise ... from ... 抛出新的异常时,新的异常是由旧的异常表现的;
  • 使用 raise ... from None 抛出新的异常时,不会打印旧的异常(即禁止的异常关联)

raise 引发异常

使用 raise 语句,主动引发异常,终止程序

x = 20
if not isinstance(x, str):
    raise Exception("value is not type of str")
else:
    print("hello")

运行结果:

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 4, in <module>
    raise Exception("value is not type of str")
Exception: value is not type of str

当raise 抛出异常时,程序就会终止

try... except 捕获异常

使用try... except 捕获异常

x = [20, 3, 22, 11]
try:
    print(x[7])
except IndexError:
    print("index out of list")

运行后不会有异常
在捕获异常后,也可以重新抛一个其它的异常

x = [20, 3, 22, 11]
try:
    print(x[7])
except IndexError:
    print("index out of list")
    raise NameError("new exception ...")

输出结果:

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 4, in <module>
    print(x[7])
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 7, in <module>
    raise NameError("new exception ...")
NameError: new exception ...

在抛出异常的日志中,可以看到日志中对 IndexError 和 NameError之间是描述是 During handling of the above exception, another exception occurred,即在处理 IndexError 异常时又出现了 NameError 异常,两个异常之间没有因果关系。

raise ... from 用法

示例:

x = [20, 3, 22, 11]
try:
    print(x[7])
except IndexError as e:
    print("index out of list")
    raise NameError("new exception ...") from e

运行结果

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 4, in <module>
    print(x[7])
IndexError: list index out of range

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

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 7, in <module>
    raise NameError("new exception ...") from e
NameError: new exception ...

在抛出异常的日志中,可以看到日志中对 IndexError和 NameError 之间是描述是 The above exception was the direct cause of the following exception,即因为 IndexError 直接异常导致了 NameError异常,两个异常之间有直接因果关系。

示例:

x = [20, 3, 22, 11]
try:
    print(x[7])
except IndexError as e:
    print("index out of list")
    raise NameError("new exception ...") from None

运行结果

Traceback (most recent call last):
  File "D:/demo/untitled1/demo/a.py", line 7, in <module>
    raise NameError("new exception ...") from None
NameError: new exception ...

在抛出异常的日志中,可以看到日志只打印了 NameError 而没有打印 IndexError

补充:python中异常处理--raise的使用

使用raise抛出异常
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
演示raise用法

try:
     s = None
     if s is None:
         print "s 是空对象"
         raise NameError     #如果引发NameError异常,后面的代码将不能执行
     print len(s)  #这句不会执行,但是后面的except还是会走到
except TypeError:
     print "空对象没有长度"
s = None
if s is None:
    raise NameError
print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里

到此这篇关于Python语法 raise ... from 用法示例详解的文章就介绍到这了,更多相关Python raise ... from 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python pyecharts Line折线图的具体实现

    Python pyecharts Line折线图的具体实现

    折线图在很多图标中都有使用,本文主要介绍了Python pyecharts Line折线图的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Python可视化神器pyecharts绘制饼状图

    Python可视化神器pyecharts绘制饼状图

    这篇文章主要介绍了Python可视化神器pyecharts绘制饼状图,饼图是用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示一个样本中各组成部分的数据占全部数据的比例
    2022-07-07
  • Python中字典的缓存池

    Python中字典的缓存池

    这篇文章主要介绍了Python中字典的缓存池,字典的缓存池采用数组实现的,并且容量也是80个,下文详细介绍需要的小伙伴可以参考一下
    2022-05-05
  • python代码打包工具cx_Freeze的安装及用法详解

    python代码打包工具cx_Freeze的安装及用法详解

    cx_Freeze是一个流行的Python库,它可以将Python脚本及其依赖项打包成独立的可执行文件,支持多平台(如Windows、Linux和macOS),本文将结合实际案例,详细介绍cx_Freeze的安装、配置和使用方法,需要的朋友可以参考下
    2024-08-08
  • 浅谈pandas关于查看库或依赖库版本的API原理

    浅谈pandas关于查看库或依赖库版本的API原理

    本文主要介绍了浅谈pandas关于查看库或依赖库版本的API原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python如何将文件a.txt的内容复制到b.txt中

    python如何将文件a.txt的内容复制到b.txt中

    这篇文章主要介绍了python如何将文件a.txt的内容复制到b.txt中,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python实现石头剪刀布程序

    python实现石头剪刀布程序

    这篇文章主要为大家详细介绍了python实现石头剪刀布程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 使用OpenCV获取图片连通域数量,并用不同颜色标记函

    使用OpenCV获取图片连通域数量,并用不同颜色标记函

    这篇文章主要介绍了使用OpenCV获取图片连通域数量,并用不同颜色标记函,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python实现带下标索引的遍历操作示例

    Python实现带下标索引的遍历操作示例

    这篇文章主要介绍了Python实现带下标索引的遍历操作,结合具体实例形式分析了2种带索引的遍历操作实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • python局域网ip扫描示例分享

    python局域网ip扫描示例分享

    这篇文章主要介绍了python局域网ip扫描示例,需要的朋友可以参考下
    2014-04-04

最新评论