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利用模糊哈希实现对比文件相似度

    Python利用模糊哈希实现对比文件相似度

    对比两个文件相似度,python中可通过difflib.SequenceMatcher/ssdeep/python_mmdt/tlsh实现,<BR>在大量需要对比,且文件较大时,需要更高的效率,可以考虑模糊哈希,本文就来和大家详细聊聊
    2023-01-01
  • python装饰器与递归算法详解

    python装饰器与递归算法详解

    本文给大家详细讲解了python中的装饰器与递归算法,有需要的小伙伴可以来参考下,希望对大家学习Python能够有所帮助
    2016-02-02
  • python简单实现获取当前时间

    python简单实现获取当前时间

    最近项目中经常需要python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次,为了能够更好的记住,我今天特意写下python 当前时间这篇文章,如果你觉的对你有用的话,可以收藏下。
    2016-08-08
  • Python实现元素等待代码实例

    Python实现元素等待代码实例

    这篇文章主要介绍了python实现元素等待代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python中的shape()详解

    Python中的shape()详解

    这篇文章主要介绍了Python中的shape()详解,在debug深度学习相关代码的时候,很容易出现shape()这样形式的东西,用来告知输出数据的形式,需要的朋友可以参考下
    2023-08-08
  • Pandas Series如何转换为DataFrame

    Pandas Series如何转换为DataFrame

    这篇文章主要介绍了Pandas Series如何转换为DataFrame问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Django中如何防范CSRF跨站点请求伪造攻击的实现

    Django中如何防范CSRF跨站点请求伪造攻击的实现

    这篇文章主要介绍了Django中如何防范CSRF跨站点请求伪造攻击的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python tqdm库的使用

    python tqdm库的使用

    这篇文章主要介绍了python tqdm库的使用,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • Django Paginator分页器的使用示例

    Django Paginator分页器的使用示例

    django内置的分页器组件,能够帮我们实现对查询的数据进行自动分页,并返回分页对象,本文讲解分页器的用法
    2021-06-06
  • Python使用selenium模拟键盘输入的常见方法

    Python使用selenium模拟键盘输入的常见方法

    本文主要介绍了在使用Selenium进行模拟登录时,账号和密码输入失败的问题,并提出了几种解决方法,包括使用Selenium的send_keys函数、pyautogui库、pynput库和JavaScript输入操作,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2025-04-04

最新评论