我们可以使用raise语句自己触发异常,raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。


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

raise 语句有如下三种常用的用法:

1️⃣ raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。

2️⃣ raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。

3️⃣ raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

每次执行 raise 语句,都只能引发一次执行的异常。先来测试一下:

>>> raise

Traceback (most recent call last):

File "<pyshell#1>", line 1, in

raise

RuntimeError: No active exception to reraise

>>> raise ZeroDivisionError

Traceback (most recent call last):

File "<pyshell#0>", line 1, in

raise ZeroDivisionError

ZeroDivisionError

>>> raise ZeroDivisionError("除数不能为零")

Traceback (most recent call last):

File "<pyshell#2>", line 1, in

raise ZeroDivisionError("除数不能为零")

ZeroDivisionError: 除数不能为零

一个实例:

class Student(object):

    def get_score(self):
return self._score def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!') # 触发异常后,后面的代码就不会再执行
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
>>> s = Student()
>>> s.set_score(60) # ok!
>>> s.get_score()
60
>>> s.set_score(9999999)
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!

最新文章

  1. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
  2. Masonry的使用
  3. POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)
  4. CSS行高&mdash;&mdash;line-height
  5. eclipse中无法使用fat.jar
  6. SQL 查询优化
  7. SB集中营
  8. 内存分配方法 kmalloc()、vmalloc()、__get_free_pages()
  9. UVA_Cubic Eight-Puzzle UVA 1604
  10. 在CMD命令行下关闭进程的命令
  11. kobox : key_waitqueue.c -v1 如何内核线程,如何使用等待队列
  12. 由Python通过__new__实现单例模式,所想到的__new__和__init__方法的区别
  13. Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令
  14. Cocos2D的OALSimpleAudio预加载音频
  15. MyEclipse 10 报错记录
  16. 红黑树与AVL特性
  17. MemoryStream生成Excel
  18. Ext.net GridPanel锁定列需要注意的几个问题
  19. python windows 下pip easy_install 使用错误的问题
  20. Android so文件进阶 &lt;一&gt;

热门文章

  1. PyTorch学习笔记6--案例2:PyTorch神经网络(MNIST CNN)
  2. C++病毒
  3. java web 项目中web.xml 详解
  4. 学习PHP中的高精度计时器HRTime扩展
  5. 【tp6】解决Driver [Think] not supported.
  6. windows kubectl 远程操作k8s
  7. AT3950-[AGC022E]Median Replace【贪心,dp】
  8. P6378-[PA2010]Riddle【2-SAT】
  9. Python日常Bug集
  10. Kettle学习笔记(二)— 基本操作