是否可以在程序的指定位置手动抛出一个异常?答案是肯定的,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 使用方法相关推荐

  1. python raise_python raise

    当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行. 演示raise用法 try: s = None if s i ...

  2. 刻意练习:Python基础 -- Task11. 魔法方法

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  3. python terminator_Python turtle.Terminator方法代碼示例

    本文整理匯總了Python中turtle.Terminator方法的典型用法代碼示例.如果您正苦於以下問題:Python turtle.Terminator方法的具體用法?Python turtle. ...

  4. Python 中的特殊方法(定制类):__str__、__cmp__、__len__、数学运算、类型转换、@property运用、__slots__和__call__函数

    Python中的特殊方法 Python的特殊方法定义在 class中,不需要直接进行显示调用,Python的某些操作符或者函数会自动调用对应的特殊方法.这些方法如:__str__().__len__( ...

  5. python文件操作的方法_python文件操作的方法介绍

    文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...

  6. python batch_size_Python config.batch_size方法代码示例

    本文整理汇总了Python中config.batch_size方法的典型用法代码示例.如果您正苦于以下问题:Python config.batch_size方法的具体用法?Python config. ...

  7. Python 防止死锁的方法

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 问题 你正在写一个多线程程序,其中线程需要一次获取多个锁,此时 ...

  8. python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...

    楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...

  9. python用类名直接调用方法_一文读全 Python 的面向对象编程方法

    背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...

最新文章

  1. 《Adobe Premiere Pro CS5经典教程》——2.9 用Media Browser查找素材
  2. mysql send-q_MYSQL---初识
  3. word2vec安装以及使用
  4. Android:禁用listView上的突出显示单击
  5. Android Camera架构分析
  6. 二分类最优阈值确定_分类模型评价标准,AUC还是Macro F1?
  7. 计算机密码发明者去世!曾获图灵奖、并启蒙 Unix 诞生!
  8. MyBatis下载和使用(保姆级)
  9. 计算机专业如何高质量的走完大学四年?毕业成为Offer收割机
  10. echar图表titile,x轴,y轴样式
  11. 阿里云盘内测_阿里云盘即将推出,欲与百度网盘较高下
  12. zoj水题分类(自己练习)
  13. 网站服务器1 mbps,网速1mbps是什么概念
  14. SpringMVC复习——B站
  15. Android平板/手机,使用qq视频通话图像旋转90度
  16. mysql中secure_file_priv=不生效的问题
  17. 单片机常用芯片总结(一)——LCD1602液晶屏
  18. 惠普台式计算机系统系统修复,一键恢复系统,详细教您怎么一键恢复惠普笔记本系统...
  19. 紫外线杀菌装置:过流式Photoscience紫外线杀菌器
  20. opencv 读取双摄自动对齐参数intrinsics.yml、extrinsics.yml 2021-04-12

热门文章

  1. 【逻辑与计算理论】组合子逻辑与 Y 组合子
  2. Spring Bean的生命周期及接口回调
  3. JavaScript 中数组方法 reduce 的妙用之处
  4. Django框架 之 Ajax
  5. HDOJ1496 Equations【Hash】
  6. 专家:不仅人脸识别,信息验证、生物特征都不可靠
  7. SPARK全栈 全流程 大数据实战 之 技术选型篇
  8. linux设备驱动模块引用和依赖
  9. Java知多少(18)类的定义及其实例化
  10. 目录管理,创建、删除、移动目录,创建、删除、移动文件