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: print("请输入一个数字")
1 login
2 register
num>>>fdgfdgfdgfdgfdgfdgsdfg
请输入一个数字
2.多分支
l = ['login','register'] for num,i in enumerate(l,1): print(num,i) try: num = int(input("nnn<<<")) print(l[num-1]) except ValueError: print("请输入一个数字,并且是整数") except IndexError: print("只能输入1或者2,不能超过2")
1 login
2 register
nnn<<<4
只能输入1或者2,不能超过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('您输入的内容不合法')
1 login
2 register
num >>>l
您输入的内容不合法
万能异常 在python的异常中,Exception 表示万能异常,可以捕捉任意的异常
except Exception as e 将具体的错误信息打印出来
s1="hello" try: int(s1) except Ecception as e : print(e) invalid literal for int() with base 10: 'hello'
多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
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])
try:
num = int(input('num >>>'))
print(l[num - 1])
func = l[num - 1][1]
func()
except (ValueError,IndexError) :*********************************
print('您输入的内容不合法')
except Exception as e:*******************************
print(e)
#print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
main()
总结:
try:
pass
except(ValueError,IndexError)
是针对性的处理
except Exception as e :
print(e)
通用性的处理
异常处理的其他操作
else分支:当try中的代码没有异常时,就执行else分支。
finally分支:不论try中的内容有没有异常,都会执行finally分支中的内容,常用来回收一些操作系统的资源:
主要进行数据库的连接,打开文件的句柄,网络连接等。
try: # f = open('www','w') # f.read() # finally: # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序 # f.close() # print('文件已经关闭了')
主动抛出异常断言:
raise ValueError('你写的不对')
断言:assert
只接受布尔值
自定义异常:
在最外层的异常处理应该在所有开发完成之后猜进行异常处理