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外面的逻辑,我可以正常运行

万能异常的缺点就是,假如你有一万行代码,不管啥错误都报这个,那你就不知道是哪里错了。。。

上一篇:Windows 7下java SDK下载、安装及环境变量设置


下一篇:hive学习4(hive的脚本执行)