python raise_python raise 使用方法
是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可。
读者可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常。
raise 语句的基本语法格式为:
raise [exceptionName [(reason)]]
其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。
也就是说,raise 语句有如下三种常用的用法:
1.raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常
2.raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
3.raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。
显然,每次执行 raise 语句,都只能引发一次执行的异常。首先,我们来测试一下以上 3 种 raise 的用法:
>>> raiseTraceback (most recent call last):
File"", line 1, in
raiseRuntimeError: No active exception to reraise>>> raiseZeroDivisionError
Traceback (most recent call last):
File"", line 1, in
raiseZeroDivisionError
ZeroDivisionError>>> raise ZeroDivisionError("除数不能为零")
Traceback (most recent call last):
File"", line 1, in
raise ZeroDivisionError("除数不能为零")
ZeroDivisionError: 除数不能为零
当然,我们手动让程序引发异常,很多时候并不是为了让其崩溃。事实上,raise 语句引发的异常通常用 try except(else finally)异常处理结构来捕获并进行处理。例如:
try:
a= input("输入一个数:")#判断用户输入的是否为数字
if(nota.isdigit()):raise ValueError("a 必须是数字")exceptValueError as e:print("引发异常:",repr(e))
程序运行结果为:
输入一个数:a
引发异常: ValueError('a 必须是数字',)
可以看到,当用户输入的不是数字时,程序会进入 if 判断语句,并执行 raise 引发 ValueError 异常。但由于其位于 try 块中,因为 raise 抛出的异常会被 try 捕获,并由 except 块进行处理。
因此,虽然程序中使用了 raise 语句引发异常,但程序的执行是正常的,手动抛出的异常并不会导致程序崩溃。
raise 不需要参数
正如前面所看到的,在使用 raise 语句时可以不带参数,例如:
try:
a= input("输入一个数:")if(nota.isdigit()):raise ValueError("a 必须是数字")exceptValueError as e:print("引发异常:",repr(e))raise
程序执行结果为:
输入一个数:a
引发异常: ValueError('a 必须是数字',)
Traceback (most recent call last):
File"D:\python3.6\1.py", line 4, in
raise ValueError("a 必须是数字")
ValueError: a 必须是数字
这里重点关注位于 except 块中的 raise,由于在其之前我们已经手动引发了 ValueError 异常,因此这里当再使用 raise 语句时,它会再次引发一次。
当在没有引发过异常的程序使用无参的 raise 语句时,它默认引发的是 RuntimeError 异常。例如:
try:
a= input("输入一个数:")if(nota.isdigit()):raise
exceptRuntimeError as e:print("引发异常:",repr(e))
程序执行结果为:
输入一个数:a
引发异常: RuntimeError('No active exception to reraise',)
python raise_python raise 使用方法相关推荐
- python raise_python raise
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行. 演示raise用法 try: s = None if s i ...
- 刻意练习:Python基础 -- Task11. 魔法方法
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- python terminator_Python turtle.Terminator方法代碼示例
本文整理匯總了Python中turtle.Terminator方法的典型用法代碼示例.如果您正苦於以下問題:Python turtle.Terminator方法的具體用法?Python turtle. ...
- Python 中的特殊方法(定制类):__str__、__cmp__、__len__、数学运算、类型转换、@property运用、__slots__和__call__函数
Python中的特殊方法 Python的特殊方法定义在 class中,不需要直接进行显示调用,Python的某些操作符或者函数会自动调用对应的特殊方法.这些方法如:__str__().__len__( ...
- python文件操作的方法_python文件操作的方法介绍
文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...
- python batch_size_Python config.batch_size方法代码示例
本文整理汇总了Python中config.batch_size方法的典型用法代码示例.如果您正苦于以下问题:Python config.batch_size方法的具体用法?Python config. ...
- Python 防止死锁的方法
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 问题 你正在写一个多线程程序,其中线程需要一次获取多个锁,此时 ...
- python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...
楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...
- python用类名直接调用方法_一文读全 Python 的面向对象编程方法
背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...
最新文章
- 《Adobe Premiere Pro CS5经典教程》——2.9 用Media Browser查找素材
- mysql send-q_MYSQL---初识
- word2vec安装以及使用
- Android:禁用listView上的突出显示单击
- Android Camera架构分析
- 二分类最优阈值确定_分类模型评价标准,AUC还是Macro F1?
- 计算机密码发明者去世!曾获图灵奖、并启蒙 Unix 诞生!
- MyBatis下载和使用(保姆级)
- 计算机专业如何高质量的走完大学四年?毕业成为Offer收割机
- echar图表titile,x轴,y轴样式
- 阿里云盘内测_阿里云盘即将推出,欲与百度网盘较高下
- zoj水题分类(自己练习)
- 网站服务器1 mbps,网速1mbps是什么概念
- SpringMVC复习——B站
- Android平板/手机,使用qq视频通话图像旋转90度
- mysql中secure_file_priv=不生效的问题
- 单片机常用芯片总结(一)——LCD1602液晶屏
- 惠普台式计算机系统系统修复,一键恢复系统,详细教您怎么一键恢复惠普笔记本系统...
- 紫外线杀菌装置:过流式Photoscience紫外线杀菌器
- opencv 读取双摄自动对齐参数intrinsics.yml、extrinsics.yml 2021-04-12