异常处理

知识储备

1、什么是异常

 

  异常是错误发生的信号

  程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出,程序的运行也随之中止。

try 和 if  的区别

if:是可预知的错误或异常场景。

try:是不可预知的异常场景,且异常已发生做出的应对手段。

分支判断:

 1 try:
 2     print('start...')
 3     x = 1
 4     y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8    # d['b']
 9     import os
10     os.aaa
11     print('end...')
12 except NameError:
13    print('变量名未定义')
14 except KeyError:
15    print('字典的key不存在')
16 except IndexError:
17    print('索引超出列表的范围')
18 
19 print('other...')
20 
21 """
22 start...
23 变量名或者字典的key或者列表的索引有问题
24 other...
25 """
分支判断

注意:

粗略的判断:

 1 try:
 2     print('start...')
 3     x = 1
 4     y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8    # d['b']
 9     import os
10     os.aaa
11     print('end...')
12 except (NameError,KeyError,IndexError):
13    print('变量名或者字典的key或者列表的索引有问题')
14 
15 print('other...')
16 
17 """
18 start...
19 变量名或者字典的key或者列表的索引有问题
20 other...
21 """
粗略的判断

万能异常(初级):

 1 try:
 2     print('start...')
 3     x = 1
 4     y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8    # d['b']
 9     import os
10     os.aaa
11     print('end...')
12 except Exception:
13    print('万能异常--》')
14 
15 print('other...')
16 
17 """
18 start...
19 万能异常--》
20 other...
21 """
万能-初级

万能异常(高级):

 1 try:
 2     print('start...')
 3     x = 1
 4     y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8    # d['b']
 9     import os
10     os.aaa
11     print('end...')
12 except Exception as e:
13    print('万能异常--》',e)
14 
15 print('other...')
16 
17 """
18 start...
19 万能异常--》 name 'y' is not defined
20 other...
21 """
万能-高级

正题总结

# try:...else...
# else不能单独使用,必须与except连用,意思是:else的子代码快在程序没检测到任何异常的情况下执行
 1 try:
 2     print('start...')
 3     x = 1
 4     # y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8     # d['b']
 9     import os
10     # os.aaa
11     print('end...')
12 
13 except Exception as e:
14     print('万能异常--》',e)
15 
16 else:
17     print('else的子代码快在程序没检测到任何异常的情况下执行')
18 
19 print('other...')
20 
21 """
22 start...
23 end...
24 else的子代码快在程序没检测到任何异常的情况下执行
25 other...
26 """
# try:...finally...
# 完整语法如下:
 1 try:
 2     print('start...')
 3     x = 1
 4     y
 5     l = []
 6     # l[3]
 7     d = {'a':1}
 8     # d['b']
 9     import os
10     # os.aaa
11     print('end...')
12 
13 except Exception as e:
14     print('万能异常--》',e)
15 
16 else:
17     print('else的子代码快在程序没检测到任何异常的情况下执行')
18 finally:
19     print('无论有没有异常发生,都会执行')
20 
21 print('other...')
22 
23 """
24 start...
25 万能异常--》 name 'y' is not defined
26 无论有没有异常发生,都会执行
27 """

 # 主动触发异常

 1 class People:
 2     def __init__(self,name):
 3         if not isinstance(name,str):
 4             raise TypeError('%s 必须是str类型' % name)
 5         self.name = name
 6 p = People(123)
 7 
 8 
 9 """
10 raise TypeError('%s 必须是str类型' % name)
11 TypeError: 123 必须是str类型
12 """
View Code

 # 断言

 1 print('part1...')
 2 
 3 # stu = ['egon','alex']
 4 stu = []
 5 
 6 assert len(stu) > 0
 7 
 8 print('part2...')
 9 print('part3...')
10 
11 
12 """
13 part1...
14 AssertionError
15 """
View Code

 # 自定义异常处理

 1 # 自定义异常
 2 class RegisterError(BaseException):
 3     def __init__(self,user,msg):
 4         self.user = user
 5         self.msg = msg
 6 
 7     def __str__(self):
 8         return '<%s : %s>' % (self.user,self.msg)
 9 
10 # raise RegisterError,意指抛出RegisterError类生成的对象(obj)并打印之,故可在RegisterError类中自定义__str__方法,实现定制化异常处理
11 # obj = RegisterError(xxx)
12 # print(obj)
13 raise RegisterError('使用者','注册失败')
14 
15 
16 """
17 raise RegisterError('使用者','注册失败')
18 __main__.RegisterError: <使用者 : 注册失败>
19 """
自定义异常
原文地址:https://www.cnblogs.com/limengjie0104/p/8871883.html