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外面的逻辑,我可以正常运行
万能异常的缺点就是,假如你有一万行代码,不管啥错误都报这个,那你就不知道是哪里错了。。。 |