Python中raise用法简单实例(超级详细,看了无师自通)

 更新时间:2024年03月29日 10:09:05   作者:Itmastergo  
python中raise语句用于手动触发异常,通过raise语句可以在代码中显式地引发异常,从而使程序进入异常处理流程,下面这篇文章主要给大家介绍了关于Python中raise用法的相关资料,需要的朋友可以参考下

前言

是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可。

大家可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常。

raise 语句的基本语法格式为:

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

也就是说,raise 语句有如下三种常用的用法:

  • raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  • raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  • raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

显然,每次执行 raise 语句,都只能引发一次执行的异常。首先,我们来测试一下以上 3 种 raise 的用法:

>>> raise
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise
>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError
>>> raise ZeroDivisionError("除数不能为零")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise ZeroDivisionError("除数不能为零")
ZeroDivisionError: 除数不能为零

当然,我们手动让程序引发异常,很多时候并不是为了让其崩溃。事实上,raise 语句引发的异常通常用 try except(else finally)异常处理结构来捕获并进行处理。例如:

try:
    a = input("输入一个数:")
    #判断用户输入的是否为数字
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print("引发异常:",repr(e))

程序运行结果为:

输入一个数:a
引发异常: ValueError('a 必须是数字',)

可以看到,当用户输入的不是数字时,程序会进入 if 判断语句,并执行 raise 引发 ValueError 异常。但由于其位于 try 块中,因为 raise 抛出的异常会被 try 捕获,并由 except 块进行处理。

因此,虽然程序中使用了 raise 语句引发异常,但程序的执行是正常的,手动抛出的异常并不会导致程序崩溃。

raise 不需要参数

正如前面所看到的,在使用 raise 语句时可以不带参数,例如:

try:
    a = input("输入一个数:")
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print("引发异常:",repr(e))
    raise

程序执行结果为:

输入一个数:a
引发异常: ValueError('a 必须是数字',)
Traceback (most recent call last):
  File "D:\python3.6\1.py", line 4, in <module>
    raise ValueError("a 必须是数字")
ValueError: a 必须是数字

这里重点关注位于 except 块中的 raise,由于在其之前我们已经手动引发了 ValueError 异常,因此这里当再使用 raise 语句时,它会再次引发一次。

当在没有引发过异常的程序使用无参的 raise 语句时,它默认引发的是 RuntimeError 异常。例如:

try:
    a = input("输入一个数:")
    if(not a.isdigit()):
        raise
except RuntimeError as e:
    print("引发异常:",repr(e))

程序执行结果为:

输入一个数:a
引发异常: RuntimeError('No active exception to reraise',)

总结

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

相关文章

  • Python实现的检测网站挂马程序

    Python实现的检测网站挂马程序

    这篇文章主要介绍了Python实现的检测网站挂马程序,需要的朋友可以参考下
    2014-11-11
  • python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法

    python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法

    这篇文章主要介绍了python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法,具有很好的参考价值,希望对大家有所帮助。
    2021-06-06
  • Django如何实现密码错误报错提醒

    Django如何实现密码错误报错提醒

    这篇文章主要介绍了Django如何实现密码错误报错提醒,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2020-09-09
  • Python Selenium 之关闭窗口close与quit的方法

    Python Selenium 之关闭窗口close与quit的方法

    今天小编就为大家分享一篇Python Selenium 之关闭窗口close与quit的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python使用 zip 同时迭代多个序列示例

    python使用 zip 同时迭代多个序列示例

    这篇文章主要介绍了python使用 zip 同时迭代多个序列,结合实例形式分析了Python使用zip遍历迭代长度相等与不等的序列相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 用Python实现爬取百度热搜信息

    用Python实现爬取百度热搜信息

    大家好,本篇文章主要讲的是用Python实现爬取百度热搜信息,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • centos7之Python3.74安装教程

    centos7之Python3.74安装教程

    这篇文章主要介绍了centos7之Python3.74安装教程,本文给大家介绍的非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • python小数字符串转数字的五种方法

    python小数字符串转数字的五种方法

    本文主要介绍了python小数字符串转数字的五种方法,根据具体需求选择合适的方法进行小数字符串转数字,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Opencv 图片的OCR识别的实战示例

    Opencv 图片的OCR识别的实战示例

    这篇文章主要介绍了Opencv 图片的OCR识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python基础教程之pip的安装和卸载

    Python基础教程之pip的安装和卸载

    pip是一种工具,可以帮助用户安装卸载一些需要的安装包,非常的简单实用,下面这篇文章主要给大家介绍了关于Python基础教程之pip的安装和卸载的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06

最新评论