Exception(异常)

11

Exception(异常)

  在学习Python时,如果使用IDEA,我们经常会看到一些红色的报错信息,导致程序终止,没有得到我们想要的输出,这是怎么回事呢?在这个博客中我会专门介绍Python的一些异常。

异常处理

异常类型

1
2
3
4
5
6
7
8
9
10
11
12
13
# throw语句在代码块中可以抛出异常, 
# 除数不能为0,会触发除0异常
a = 1 / 0

b = [1, 2, 3]
# 索引不能超过数组长度,会触发索引越界异常
print(b[3])

# str类型和数字不能直接相加,会触发类型异常
c = "123" + 456

# assert断言:当表达式为False时会触发断言异常
assert 6 > 10

我们在命令行中进行测试,因此没有红色的提示信息,如果在PyCharm或者其他的IDEA中运行,则会看到红色的提示信息。
114

try…except异常捕获

115

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# try: 语句1 except: 语句2 执行语句1如果发生异常则直接跳到except中执行语句2,如果没有异常则不执行语句2
# try:
# 语句1(可能出错的步骤)
# except ErrorName(默认为所有异常都抛弃):
# 语句2(出现错误的处理过程)

try:
print('除以0之前')
a = 5 / 0
print('除以0之后')
except ZeroDivisionError:
a = 5
print('except')
print(a)

116

try…except…else异常捕获

117

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# try: 语句1 except: 语句2 else: 语句3 执行语句1如果发生异常则直接跳到except中执行语句2,如果没有异常则执行语句3
# try:
# 语句1(可能出错的步骤)
# except ErrorName(默认为所有异常都抛弃):
# 语句2(出现错误的处理过程)
# else:
# 语句3(没有出错执行的代码)

try:
print('除以0之前')
a = 5 / 0
print('除以0之后')
except ZeroDivisionError:
a = 5
print('except')
else:
print('else')
print(a)

try:
print('除以2之前')
a = 5 / 2
print('除以2之后')
except ZeroDivisionError:
a = 5
print('except')
else:
print('else')
print(a)

118

try…except…else…finally

119

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# try: 语句1 except: 语句2 else: 语句3 finally: 语句4 执行语句1如果发生异常则直接跳到except中执行语句2,如果没有异常则执行语句3,最终都要执行finally中的语句4
# try:
# 语句1(可能出错的步骤)
# except ErrorName(默认为所有异常都抛弃):
# 语句2(出现错误的处理过程)
# else:
# 语句3(没有出错执行的代码)
# finally:
# 语句4(最终都要执行的代码)

try:
print('除以0之前')
a = 5 / 0
print('除以0之后')
except ZeroDivisionError:
a = 5
print('except')
else:
print('else')
finally:
print('finally')
print(a)

try:
print('除以2之前')
a = 5 / 2
print('除以2之后')
except ZeroDivisionError:
a = 5
print('except')
else:
print('else')
finally:
print('finally')
print(a)

120

自定义异常

1
2
3
4
5
6
7
// 用户可以创建一个新的异常类来使用自定义异常。异常类需要继承自Exception类。
class MyException(Exception):
def __init__(self, value):
super(MyException, self).__init__(value)

// raise抛出一个指定异常对象,可以抛出任何类型,但是处理时必须用相应的异常类型去捕获
raise MyException("月份值不能超过12!")

121

Special Structure小结

  红色的异常语句是每一个程序员都遇到过的,在这里我们对异常进行了揭秘,可能在平时的做题或者工程中很难用到,我们还是要了解它的机制,当我们需要的时候可以及时回忆起来。

-------------本文结束感谢您的阅读-------------
0%