首页 > 编程语言 >Python | raise的使用

Python | raise的使用

时间:2023-04-26 10:13:54浏览次数:40  
标签:语句 raise Python 程序 引发 ZeroDivisionError 使用 异常

当程序出现错误,Python会自动引发异常,Python允许我们在程序中手动设置异常,使用 raise 语句即可。一旦执行了raise语句,raise后面的语句将不能执行。

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

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

raise [exceptionName [(reason)]]

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

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

  1. raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  2. raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  3. 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,Python,程序,引发,ZeroDivisionError,使用,异常
From: https://www.cnblogs.com/zhangxuegold/p/17354798.html

相关文章

  • VUE在Return中定义变量,放在方法中使用
    Return中定义CSS变量在Return中定义一个比变量data(){return{'--mg_top1':'3vh',},}在methods方法使用this.$el.style.setProperty('--mg_top1','3.6vh') 在CSS中使用.mg_top{margin-top:var(--mg_top1)......
  • [开发者必读]如何使用MyEclipse仪表板?
    MyEclipsev2022.1.0正式版下载MyEclipse技术交流群:742336981欢迎一起进群讨论MyEclipse 仪表板是一个很好的项目起点,无论是开始一个新项目、在源代码控制中处理一个项目,还是寻找示例项目来学习一些新东西。MyEclipseDashboard视图可以让开发者快速访问常用的功能、帮助文......
  • Vue3 + element-plus使用注意
    1.给组件设置ref="xxx"例如:<el-tableref="tableRef"定义tableRef时,需要注意尽量使用ref()而非ref(null)consttableRef=ref();因为使用ref(null)会得不到$el的相关属性,即undefined例如:表格自适应高度consttableRef=ref();constsetTableHeight=()=>......
  • JSON View谷歌浏览器插件使用
    JSONVIewer:sourcecode:https://github.com/tulios/json-viewer谷歌浏览器插件,用于展示JSON、JSONP格式的代码文件。网页显示效果如下:插件主要参数修改:font-size:字体大小;line-height:行高。官网介绍:ThemostbeautifulandcustomizableJSON/JSONPhighlighterthatyou......
  • Python爬虫基础之二
    Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、BeautifulSoup库的使用、xpath和正则表达式的使用等。此外,还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。上一篇文章讲解了有关条件判断语句、循环语句等相关知识,本节将围绕元组、字典、......
  • 关于oracel 递归语法start with connect by 和 left join 一起使用的一个bug
    左表为树状结构机构表A,右表为人员表(有机构ID字段)BSELECTA.*,B.*FROMALEFTJOINBONA.ORG_ID=B.ORG_IDSTARTWITHA.ORG_ID='011000000004'CONNECTBYPRIORA.ORG_ID=A.P_ORG_ID查询结果出现,B表中的1条记录,最后重复出现。(最终的结果可能为:对A和B......
  • ant-design blazor 简单使用教程
    使用教程  先本地安装模板,然后再创建项目例:dotnetnew--installAntDesign.Templates dotnetnewantdesign--host=wasm--full-omonitor生成后的项目如图所示: 直接运行,就可以看到结果了,开发效率确实很高,适用于小型项目,比如监控面板这种内部用,又没有多少开发资......
  • python+playwright 学习-56 svg 元素定位
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。svg元素定位如下看到的svg标签,就是svg元素用普通的标签定位,是无法定位的,如xpath的//svg只能通过name()函数来定位//*[name()="svg"]页面上用......
  • 关于vcpkg中x-history命令移除后及git subtree的使用问答
    1、现在的版本中已经移除了x-history命令,我该使用什么方式来查看port的历史记录呢如果当前版本的vcpkg中已经移除了x-history命令,您可以使用以下方法查看port的历史记录:使用Git命令:首先,确保您已经安装了Git。然后,在命令行或终端中,导航到vcpkg的安装目录。接下来,使用以下命令......
  • Element-Plus中表格的使用
    table的使用基础使用el-table是整个表格,其中的data是整个列表要展示的数据。一般我们使用表格所展示的内容都是数组嵌套对象的形式,width就是指定整个表格的宽度,也就是基础的css样式。其中每一列使用el-table-column来包裹,在el-table-column中prop表示数组中每一项元素的建,label......