python note 19 异常处理
1、单分支
# 单分支 l = ['login','register'] for num,i in enumerate(l,1): print(num,i) try: num = int(input('num >>>')) print(l[num - 1]) except ValueError : # except处理的异常必须和实际报错的异常是相同的 print('请输入一个数字')
2、多分支
# 多分支 l = ['login','register'] for num,i in enumerate(l,1): print(num,i) try: num = int(input('num >>>')) print(l[num - 1]) except ValueError : # 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支 print('请输入一个数字') except IndexError : # 如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错 print('只能输入1或2')
3、多分支合并
# 多分支合并 l = ['login','register'] for num,i in enumerate(l,1): print(num,i) try: num = int(input('num >>>')) print(l[num - 1]) except (ValueError,IndexError) : print('您输入的内容不合法')
4、万能异常
# 万能异常 def buy(): print('buy') name def back(): print('back') [][1] def show(): print('show') 1/0 def main(): l = [('购物',buy),('退货',back),('查看订单',show)] while True: for num,i in enumerate(l,1): print(num,i[0]) num = int(input('num >>>')) print(l[num - 1]) try: func = l[num - 1][1] func() except Exception: print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0]) main()
5、as语法 能够将具体错误信息打印出来
except Exception as e: print(e)
6、多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
try: pass except (ValueError,IndexError): print('针对性的处理') except Exception as e: print(e) print('通用性的处理')
7、else分支
try: print('aaa') # 给某某某发邮件 # name # [][1] # 1/0 except NameError: # 网络不稳定,邮箱地址错误 print('name error') except IndexError: print('index error') except Exception as e: print('Exception') else: # 当try中的代码不发生异常的时候 走else分支 如果发送成功了 进行一些处理 print('else')
8、finally分支
try: print('aaa') # 给某某某发邮件 # name # [][1] # 1/0 except NameError: # 网络不稳定,邮箱地址错误 print('name error') except IndexError: print('index error') except Exception as e: print('Exception') else: # 当try中的代码不发生异常的时候 走else分支 如果发送成功了 进行一些处理 print('else') finally: # 无论如何都会被执行 print('finally')
9、异常处理的几种情况
try ... except try ... except ... else try ... finally try ... except ... finally try ... except ... else ... finally