Python基础-异常处理

python的异常处理机制,由try,except,raise,else,finally关键字构成


异常基本用法
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
python 异常关键字 try except else finally raise
try:
statement..
(raise...)
except EX:
statement
else:
statement
finally:
statement
except 块可以多个 捕获相应的异常后进入相应的except块 父类放在最后
else 在主代码没有异常的情况下继续需要执行的代码
finally 是否有异常最终都会执行
python 异常都继承BaseException
主要子类为Exception 自定义需要继承Exception

"""


def divide(n):
try:
a = 10
b = 10 / n
print("divide result:", b)
except TypeError:
print("type error...")
except ArithmeticError:
print("arithmetic error ...")
else:
print("this is else block")
finally:
print("this is finally block")
print("-----------------------")


divide("haha")
divide(0)
divide(2)
"""
python 也可以同时捕获多个异常
"""


def divide_two(n):
try:
a = 10
b = 10 / n
print("divide result:", b)
except (TypeError, ArithmeticError):
print("some error...")


divide_two(0)
"""
访问异常信息 可以直接打印异常信息
"""


def divide_three(n):
try:
a = 10
b = a / n
print("divide result:", b)
except Exception as e:
print(e.args)
print(e)
print(str(e))


divide_three(0)
"""
finally 不执行的情况 在try或者except块中使用了
退出解释器的方法 finally块会不执行 应避免这种情况
"""
import os


def divide_three(n):
try:
a = 10
b = a / n
print("divide result:", b)
os._exit(1)
except Exception as e:
print("this is error block")
os._exit(1)
finally:
# finally 块无法执行
print("this is finally")


#divide_three(0)
divide_three(2)
raise用法以及自定义异常
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
36
37
38
39
40
41
42
43
44
45
46
47
48
"""
raise 引发异常 每次只能引发一个异常实例
raise 单独使用,后面也可以跟着异常类或者异常实例
"""


def raise_test(n):
if n == 1:
raise
elif n == 2:
raise TypeError
elif n == 3:
raise ValueError("this is value error")
else:
print("no error")


def main_test(m):
try:
raise_test(m)
except Exception as e:
print("Error:", str(e))


main_test(1)
"""
自定义异常 继承Exception或者Exception子类
"""


class MyError(Exception):
pass


def myError_test(n):
if n == 1:
raise MyError("this is my error")


def my_error(m):
try:
myError_test(m)
except Exception as e:
print(e)
raise # 当前error继续向上抛出


my_error(1)