Python raise语句(抛出异常)
当遇到异常情况时,用户可以通过抛出异常进行相应处理。本文将学习 Python 中有关抛出异常的知识和技巧。
raise NameError('这里使用raise抛出一个异常')
NameError: 这里使用raise抛出一个异常
raise 唯一的一个参数指定了要被抛出的异常,它必须是一个异常的实例或异常的类(Exception的子类)。
raise IndexError() #输出异常的类名称
IndexError
下面的示例读取类 Fruit 的属性,如果类没有该属性,就输出 AttributeError 异常。
苹果
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in __getattr__
AttributeError
下面的示例利用 sys.exit() 函数输出一个 SystemExit 异常,然后在异常处理例程中显示一个字符串。
目前还不能结束解释器的运行
如果想正常结束 Python 解释器的运行,那么最好使用 os 模块的 _exit() 函数,代码如下:
图1:结束 Python 解释器
【示例】离开嵌套循环。
1 1
2 2
当i = 2 j = 2时离开嵌套循环
ExitLoop 类继承自 Exception。当程序代码运行至:
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所示。
图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时离开嵌套循环")