Python raise用法
读者可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常。
raise 语句的基本语法格式为:
raise [exceptionName [(reason)]]
其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。
也就是说,raise 语句有如下三种常用的用法:
- raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
- raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
- raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。
想了解一下常用的异常类名称,可以阅读《Python常见异常类型》一节。
显然,每次执行 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))
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
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))
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 也允许程序自行引发异常,自行引发异常使用 raise 语句来完成. 异常是一种很"主观"的说法,以下雨为例,假设大家约 ...
- Python raise用法(超级详细,无师自通)
问题: 是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 你们可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为 ...
- Python raise用法(详细讲解)
在写代码的过程中,我们是否有这样一个疑问?即是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可. 可能大家会感到疑惑,即我们 ...
- Python的raise用法
学习笔记 1.什么是异常处理 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback, ...
- python raise exception用法_python Exception raise
异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. Exception类是常用的异常类,该类包括Standa ...
- python with用法
@python with用法 python中with可以明显改进代码友好度,比如: [python] view plaincopyprint? with open('a.txt') as f: pri ...
- python raise
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行. 演示raise用法 a = 0 #30if a > 1 ...
- python raise用处_python基础教程python raise的基本使用
简介 当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行. 1.演示raise用法 try: s = None i ...
- python raise的基本使用
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 简 ...
最新文章
- Activity的LaunchMode
- Asp.net,C# 加密解密字符串
- 网站apache环境S2-057漏洞 利用POC 远程执行命令漏洞复现
- 【FLASH BUILDER 4.6 快捷键】只记几个对自己有帮助的
- Python之迭代器
- jQuery可放大预览的图片滑块
- ui unity 图片高亮_程序化生成UI模型与顶点动画
- php sorcket_PHP: Sockets - Manual
- 小甲鱼 OllyDbg 教程系列 (十五) : 逆向注册机简单算法
- mac 切换鼠标滚轮方向
- 开发者如何谈判才能获得更高的薪水?
- #linux包之sysstat之iostat命令
- SAP软件财务年结步骤
- TIF转PDF--itextpdf
- 每日技巧分享:怎么裁剪音频,快学习起来
- Unity TimeLine实用功能讲解
- 【论文速递】-2022-金融研究-系统性金融风险文献综述:现状、发展与展望
- 登录onedrive显示无法连接服务器,Win10专业版系统下OneDrive无法登录提示连接到OneDrive时出现问题怎么办...
- html文件右键没有打开方式,一个文件打不开,点右键,怎么在打开方式中加入Word,Excel的打开方式,打开方式中有Word的打开方式?...
- 2021-03-15我的博客
热门文章
- 最远点采样(Farthest Point Sampling,FPS)算法详解
- 【Tensorflow入门教程一】纵观全局:tensorflow各函数块解析。
- 1990-2019年银行存款准备金率
- 干货自助时代,带你玩转Big Data:SDCC 2017·深圳站大数据专场一轮预告上线
- k3wise域服务器登录证书,K3WISE疑难杂症问题解析(七)
- 自己做量化交易软件(17)通过基本面建立自己的股票池
- 为什么内存进制是1024,数据传输速率是1000?
- 招银一面:如何保障 MySQL 和 Redis 的数据一致性?
- 微软的官方升级网站系统--Windows update
- 操作csv格式文件之csv.reader()方法