day17-异常处理
今天的内容比较少,只是单独的异常处理
开始今日份整理
1.异常
定义:异常时错误发生的信号,一旦出错,并且程序没有处理这个错误,就会抛出异常,并且程序会运行中止
2.异常的分类
2.1语法错误:python会在运行之前,会先检查语法是否错误,这个是程序员代码中不应该出现的,需要时刻注意
2.2逻辑错误:(常见)
- ValueError
- NameError
- IndexError
- KeyError
- AttributeError
- TypeError
- Exception:万能错误参数
3.异常的处理
- 强调一:对于错误的条件可以预知的,此时应该用if判断来预防
- 强调二:对于错误发生的条件不可预知的,应该用异常处理机制进行判断
第一种方式:单分支机构,try………except………
try: l1 = [1,2,3] l1[100] # IndexError print(333) print(5555) # dic = {'key1':'v1'} # dic['key2'] # KeyError print(777) except IndexError as e: print(e)
第二种方式:多分支机构,try .except except ....多支
try: l1 = [1,2,3] # l1[100] # IndexError print(333) print(5555) dic = {'key1':'v1'} # dic['key2'] # KeyError num = int(input('请输入选项:')) print(777) except IndexError as e: print(e) except KeyError as e: print(e)
第三种方式:万能异常 Exception
try: l1 = [1,2,3] # l1[100] # IndexError print(333) print(5555) dic = {'key1':'v1'} # dic['key2'] # KeyError num = int(input('请输入选项:')) print(777) except Exception as e: print(e)
# 以上这三种分情况讨论:
# 1,如果你对报错信息不关系,只是想直接跳过报错而不分流执行代码。 万能异常最好。
# 2,如果你想要捕捉具体的错误信息,根据不同的错误执行不同的分支。多分支比较好
第四种方式:多分支加万能异常
try: num = input('请输入你要办理的业务:').strip() num = int(num) menu_dict[num]() except ValueError: print('请输入数字') except KeyError: print('超出范围,请重新输入') except Exception: print("出现未知错误.....")
第五种方式,主动触发异常,之前有用过,
try: raise TypeError('类型错误') except Exception as e: print(e)
第六种方式,断言,代码完成有明确的结果
assert ('name' in info)and ('age' in info) #有着明确的结果
第七种方式,自定义异常类型,
毕竟异常的种类不是一成不变的,有可能异常的种类还是一直在增加,这个时候就需要自己创建一个异常种类了
class PhoneconnectionError(BaseException):#手机连接失败 pass try: raise PhoneconnectionError('连接错误...') except PhoneconnectionError as e: print(e)
最后的最后,在代码中尽量少用try开头,except 结尾,这样根本看不到自己的代码有什么问题。