首页 > 编程笔记

Python raise语句(抛出异常)

当遇到异常情况时,用户可以通过抛出异常进行相应处理。本文将学习 Python 中有关抛出异常的知识和技巧。

raise 语句

Python 使用 raise 语句抛出一个指定的异常,例如:

raise NameError('这里使用raise抛出一个异常')

输出结果如下:
  raise NameError('这里使用raise抛出一个异常')
NameError: 这里使用raise抛出一个异常

raise 唯一的一个参数指定了要被抛出的异常,它必须是一个异常的实例或异常的类(Exception的子类)。

提示:如果用户只想判断是否会抛出一个异常,而不想去处理它,那么此时使用 raise 语句是最佳的选择。

用户也可以直接输出异常的类名称,例如:

raise IndexError()  #输出异常的类名称

输出结果如下:
  raise IndexError()  #输出异常的类名称
IndexError

下面的示例读取类 Fruit 的属性,如果类没有该属性,就输出 AttributeError 异常。
class Fruit:
    def __init__(self, name):
        self.name = name
    def __getattr__(self, attr):
        if attr != "name":
             raise AttributeError
  
f = Fruit("苹果")
print(f.name)
print(f.price)
输出结果如下:
苹果
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in __getattr__
AttributeError

结束解释器的运行

用户可以通过输出 SystemExit 异常强制结束 Python 解释器的运行,代码如下:
C:\Users\Administrator>python
>>>raise SystemExit
使用 sys.exit() 函数会输出一个 SystemExit 异常,sys.exit() 函数会结束线程。

下面的示例利用 sys.exit() 函数输出一个 SystemExit 异常,然后在异常处理例程中显示一个字符串。
import sys
try:
    sys.exit()
except SystemExit:
    print ("目前还不能结束解释器的运行")
输出结果如下:
目前还不能结束解释器的运行

如果想正常结束 Python 解释器的运行,那么最好使用 os 模块的 _exit() 函数,代码如下:
C:\Users\Administrator>python
>>>import os
>>>os._exit(0)
输出结果如图1所示。

结束 Python 解释器
图1:结束 Python 解释器

离开嵌套循环

我们知道,如果想离开循环,就使用 break 语句。但是如果在一个嵌套循环之内,break 语句只能离开最内层的循环,而不能离开嵌套循环,则可以使用 raise 语句离开嵌套循环。

【示例】离开嵌套循环。
class ExitLoop(Exception):
    pass
  
try:
    i = 1
    while i < 10:
        for j in range(1, 10):
            print (i, j)
            if (i == 2) and (j == 2):
                raise (ExitLoop)
            i+=1
except ExitLoop:
    print ("当i = 2 j = 2时离开嵌套循环")
输出结果如下:
1 1
2 2
当i = 2 j = 2时离开嵌套循环

ExitLoop 类继承自 Exception。当程序代码运行至:

raise ExitLoop

将跳出嵌套循环,然后跳至:

except ExitLoop:

继续运行以下命令:

print ("当i = 2 j = 2时离开嵌套循环")

推荐阅读