文章目录

  • 0. 介绍
  • 1. raise 介绍(案例)
  • 2. raise 不需要参数(案例)
  • 3. raise:单独一个 raise(正常程序使用无参的 raise )
  • 4. 其它案例
    • 4.1 案例1
    • 4.2 案例2
  • 5. 处理流程
  • 总结

0. 介绍

问题1: 是否可以在程序的指定位置手动抛出一个异常

答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可。

问题2: 我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?

首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常(比如1÷0没有意义,程序没有写错,但是这样运算不合理,就是异常)。

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

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述

如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

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

  • raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  • raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  • 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: 除数不能为零

1. raise 介绍(案例)

程序正常运行的时候,根据需要,用 raise 手动引发异常。

raise 语句引发的异常,通常用 try exceptelse finally)异常处理结构来捕获并进行处理。例如:

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

当我们输入字母 a ,程序运行结果为:

runfile('E:/09-code/01-turbulence/test/test04.py', wdir='E:/09-code/01-turbulence/test')
输入一个数:>? a
引发异常: ValueError('a 必须是数字')

当我们输入数字 8,程序运行结果为:

输入一个数:8

由上面示例可以看出,我们手动让程序引发异常,很多时候并不是为了让其崩溃。

2. raise 不需要参数(案例)

这里重点关注位于 except 块中的 raise

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

由于在其之前我们已经手动引发了 ValueError 异常,因此这里当再使用 raise 语句时,它会再次引发一次。当我们输入字母 a ,程序执行结果为:

In[2]: runfile('E:/09-code/01-turbulence/test/test04.py', wdir='E:/09-code/01-turbulence/test')
输入一个数:a
引发异常: ValueError('a 必须是数字',)
Traceback (most recent call last):File "D:\python3.6\1.py", line 4, in <module>raise ValueError("a 必须是数字")ValueError: a 必须是数字

3. raise:单独一个 raise(正常程序使用无参的 raise )

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

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

当我们输入字母 a ,程序执行结果为:

In[3]: runfile('E:/09-code/01-turbulence/test/test04.py', wdir='E:/09-code/01-turbulence/test')
输入一个数:>? a
引发异常: RuntimeError('No active exception to reraise')

4. 其它案例

4.1 案例1

def read_file(file, pattern):try:if file.endswith('rtd'):data = pd.read_csv(file, skiprows=41, sep=r'\t')elif file.endswith('csv'):data = pd.read_csv(file)else:raise ValueError("Unknown file type")data = extract_cols(data, pattern=pattern, file=file)except Exception as e:print(f"{os.path.basename(file).split('.')[0]}: {e}")data = pd.DataFrame()return data

4.2 案例2

def divide(a, b):return a/btry:divide(1, 0)
except:print("divide by 0")
else:print("the code is no problem")print("code after try catch,hello,world!")

输出结果

divide by 0
code after try catch,hello,world!

5. 处理流程

try:code    #需要判断是否会抛出异常的代码,如果没有异常处理,python会直接停止执行程序except:  #这里会捕捉到上面代码中的异常,并根据异常抛出异常处理信息
#except ExceptionName,args:    #同时也可以接受异常名称和参数,针对不同形式的异常做处理code  #这里执行异常处理的相关代码,打印输出等else:  #如果没有异常则执行elsecode  #try部分被正常执行后执行的代码finally:code  #退出try语句块总会执行的程序

可以看到

    1. 这里的 else 是和 try-catch 连用的,并且 else 只在 try 中代码没有异常的情况下执行,else 必须在 except 这句代码存在的时候才能出现。
    1. finally 这个片段里面的代码是肯定在最后执行的,无论前面是否发生异常,最后总会执行finally片段内的代码。
  • 所以,正常的流程是:try 没有发生错误-》else 内的代码-》finally 中的代码。

  • 发生异常的流程是:try 中发生异常-》被 except 捕获并执行 except 片段中的代码-》执行 finally 中的代码。

总结

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

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

参考链接:
链接1、

Python中的异常处理raise介绍相关推荐

  1. Python进阶与拾遗8:Python中的异常处理

    Python进阶与拾遗8:Python中的异常处理 异常相关概念 异常的定义 异常的角色 常用的异常处理方法 try/except/else/finally语句 raise语句 assert语句 wi ...

  2. Python中的异常处理Try...except...finally的使用的简单理解

    python中的异常处理 1.Python中的异常处理定义 2.Try-except-finally的使用 3.代码 4.运行结果 1.Python中的异常处理定义 在程序运行的过程中,如果发生了错误 ...

  3. Python中的顺序表介绍

    Python中的顺序表介绍 在 Python 中,列表是一种基本的数据类型,列表的数据组成了一个序列,序列里的数据是有序的(索引),可以快速地找到指定的数据. 在开发中,经常需要将一组数据作为一个整体 ...

  4. 【Python 实战基础】Python 中 PyQt6 的 QPen 介绍

    目录 一.实战场景 二.主要知识点 文件读写 基础语法 PyQt6 QPen 三.菜鸟实战 一.实战场景 实战场景:Python 中 PyQt6 的 QPen 介绍 二.主要知识点 文件读写 基础语法 ...

  5. Python中测试代码的介绍

    文章目录 前言 一.测试的目的 二.测试函数 1.断言方法 2.可通过的测试 3.不可通过的测试 4.添加多个测试 三.测试类 1.简单的测试类 2.含多个答案的测试类 3.setUp()方法 总结 ...

  6. Python中numpy.power()函数介绍

    Python中numpy.power()函数介绍 power(x, y) 函数,计算 x 的 y 次方. 示例: x 和 y 为单个数字: import numpy as npprint(np.pow ...

  7. python中的异常处理try/except/finally/raise

    异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确 ...

  8. python中if错误-python中的异常处理

    异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同 ...

  9. Python中的异常处理详解

    1. 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(rai ...

最新文章

  1. 设计模式 之美 -- 工厂方法模式
  2. sublime text3 运行lua_[电脑常识] 用这4个系统垃圾清理软件,让电脑操作系统运行如飞 !...
  3. pyqt播放视频不能显示 解决
  4. cadence -- FPM0.0.8.0生成skill工具集的方法
  5. 使用Docker Swarm部署MinIO ​​​​​​​
  6. 傅里叶变换 【完整版】
  7. rhel5中查询设备上采用的未知文件系统
  8. Mysql调优ref_【总结】mysql调优
  9. 工程、技术与工程师三者之间的相互关系
  10. springCloud 2020.x 版本变化,移除eureka以外的Netflix组件
  11. 双显卡同时显示多个显示屏
  12. Xshell7怎么更改字体颜色和标签颜色方法教程
  13. MACbook Air 装win7 步骤
  14. 为了让你的硬盘资源能完好地传给你的曾曾曾孙,科学家想到了这些办法……...
  15. 解决CPU使用过高问题
  16. SK6805MICRO-2427RGB灯珠 2427RGB内置IC灯珠 适用显示领域、智能应用、蓝牙WiFi装饰
  17. 色调映射(Tone Mapping)
  18. Mysql按照汉语拼音首字母A-Z排序
  19. 7-15 说反话-加强版 (20 分)
  20. 我的世界服务器怎么显示玩家血量,我的世界如何用boss血条显示玩家血量 | 手游网游页游攻略大全...

热门文章

  1. LabView连接Access
  2. Oracle报错:ORA-01722-无效数字
  3. 如何选择一款适合自己的ssl证书?
  4. java 显示网页gif_Java在窗口上加载显示GIF动画图像
  5. 从内层循环退出外层循环的方法
  6. 信息系统战略规划(ISSP)三个阶段
  7. Magento 快钱(99Bill)支付网关(Payment Gateway)
  8. Internet大事记,1981-1985
  9. 2021-10-22 学习笔记:FastAPI基础使用指南
  10. 历史最全自然语言处理各领域常见 数据增强 方法整理分享