raise语句
- 当程序出现错误时,系统会自动引发错误。除此之外,也允许程序自行引发异常
- raise使用场景:当用户只是想判断是否会抛出一个异常,而不想去处理它,此时使用raise语句是最佳选择。
- python使用raise语句抛出一个指定的异常
看下面的例子
# raise抛出异常的机制
# 执行到抛出异常后,异常后面的程序不会执行,可以定位错误发生的地方
# 根据项目的实际需要,发生什么情况需要抛出异常
# 举例:当用户输入的数字小于0,就抛出异常,但是不处理
def TestRaise(number):
if number < 0:
raise ValueError('Invalid value')
TestRaise(-1)
运行结果
Traceback (most recent call last):
File "/Users/chenjihong/PycharmProjects/test/test.py", line 61, in <module>
TestRaise(-1)
File "/Users/chenjihong/PycharmProjects/test/test.py", line 60, in TestRaise
raise ValueError('Invalid value')
ValueError: Invalid value
再看一个例子:
# 属性异常
# 如果输入的名字是name,检测通过
class myclass:
def __init__(self,name):
self.name = name
def __getattr__(self, attr):
if attr != "name":
raise AttributeError
x = myclass('zhangsan')
# 访问的属性存在,正常输出
print(x.name)
输出结果
zhangsan
下面由于访问的属性不存在,抛出异常
# 属性异常
# 如果输入的名字是name,检测通过
class myclass:
def __init__(self,name):
self.name = name
def __getattr__(self, attr):
if attr != "name":
raise AttributeError
x = myclass('zhangsan')
# 访问的属性不存在,抛出异常
print(x.sex)
抛出异常
Traceback (most recent call last):
File "/Users/chenjihong/PycharmProjects/test/test.py", line 13, in <module>
print(x.sex)
File "/Users/chenjihong/PycharmProjects/test/test.py", line 9, in __getattr__
raise AttributeError
AttributeError
raise作用:离开嵌套循环
- 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 = i + 1
except ExitLoop:
print('当 i = 2 and j = 2 时离开嵌套循环')
运行结果
1 1
2 2
当 i = 2 and j = 2 时离开嵌套循环
封号操作