python的异常处理try/except 万能处理exception
1、try方式
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 except ValueError as e: #except代表捕捉的意思,as,把ValueError取个别名叫e print(e) #表示代码在执行过程中遇到异常之后直接跳到except C:\python35\python3.exe D:/pyproject/day31/错误与异常.py >>>23 >>>>dd invalid literal for int() with base 10: 'dd'
那如果出现了其他的类型的错误呢。我们上面这个只能捕捉到这一种错误类型
2、try多分支异常处理,类似于elif
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 except KeyError as e: #except代表捕捉的意思,把ValueError取个别名叫e print(e) except ValueError as e: print("--->",e) C:\python35\python3.exe D:/pyproject/day31/异常处理.py >>>aa ---> invalid literal for int() with base 10: 'aa'
2.1上面这是2种错误,那么如果再来一种错误呢
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 l=[1,2,3] l[666666]#取一个不存在的索引就会触发IndexError except KeyError as e: #except代表捕捉的意思,把ValueError取个别名叫e print(e) except ValueError as e: print("--->",e) except IndexError as e: print("索引错误",e) C:\python35\python3.exe D:/pyproject/day31/异常处理.py >>>1 >>>>2 索引错误 list index out of range
2.2如果try里面的代码运行有错误了,并不影响try外面的代码的继续运行的
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 l=[1,2,3] l[666666]#取一个不存在的索引就会触发IndexError except KeyError as e: #except代表捕捉的意思,把ValueError取个别名叫e print(e) except ValueError as e: print("--->",e) except IndexError as e: print("索引错误",e) print("我是try外面的逻辑,我可以正常运行") C:\python35\python3.exe D:/pyproject/day31/异常处理.py >>>11 >>>>sdsf ---> invalid literal for int() with base 10: 'sdsf' 我是try外面的逻辑,我可以正常运行
3、那么还有好多的异常类型呢,总不能一个一个的都加上去吧,这时候就用到了万能异常
Exception
这样的话不管什么错误都可以捕捉的到了。
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 l=[1,2,3] l[666666]#取一个不存在的索引就会触发IndexError except Exception as e: print("万能异常",e) print("我是try外面的逻辑,我可以正常运行") C:\python35\python3.exe D:/pyproject/day31/异常处理.py >>>111 >>>>sdfdsf 万能异常 invalid literal for int() with base 10: 'sdfdsf' 我是try外面的逻辑,我可以正常运行
3.1 try else 当代码块中没有异常则触发else
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 except Exception as e: #except代表捕捉的意思,把ValueError取个别名叫e print("万能异常",e) else: print("没有异常就执行我") print("我是try外面的逻辑,我可以正常运行") C:\python35\python3.exe "D:/pyproject/day31异常处理 socket介绍/异常处理.py" >>>11 >>>>22 没有异常就执行我 我是try外面的逻辑,我可以正常运行
3.2 finally 不管有没有异常都执行这段代码块
try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>") int(num)#主逻辑 except Exception as e: #except代表捕捉的意思,把ValueError取个别名叫e print("万能异常",e) finally: print("无论是否异常都执行这段代码,通常是进行清理操作") print("我是try外面的逻辑,我可以正常运行") C:\python35\python3.exe "D:/pyproject/day31异常处理 socket介绍/异常处理.py" >>>11 >>>>sddsdf 万能异常 invalid literal for int() with base 10: 'sddsdf' 无论是否异常都执行这段代码,通常是进行清理操作 我是try外面的逻辑,我可以正常运行
3.3我想达到这样的效果,如果用户输入的不对,就让他重新输入,知道正确为止
while True: try: age=int(input(">>>")) int(age)#主逻辑 break except Exception as e: print("请重新输入",e) print("我是try外面的逻辑,我可以正常运行") C:\python35\python3.exe D:/pyproject/day31/异常处理.py >>>222ss 请重新输入 invalid literal for int() with base 10: '222ss' >>>11 我是try外面的逻辑,我可以正常运行
万能异常的缺点就是,假如你有一万行代码,不管啥错误都报这个,那你就不知道是哪里错了。。。