程序员终生与bug斗争,为了铲除bug,怎能不懂异常处理的基本技巧?
python提供了异常处理的一个方法try
1.常见的程序错误有:
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
ValueError 传入无效的参数
TypeError 对类型无效的操作
IndentationError 缩进错误
SyntaxError Python 语法错误
KeyError 映射中没有这个键
IndexError 序列中没有此索引(index)
ImportError 导入模块/对象失败
NameError 未声明/初始化对象 (没有属性)
RuntimeError 一般的运行时错误
如何加入异常处理代码,是出现错误不报错,并且把错误类型展示
2.那就要引出 try 了,遇见要发生的错误,就try一下吧!
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
try:
print(2+'3')
except TypeError:
print('你错了') #你错了
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
[][3] #IndexError
{}['k'] #KeyError
1/0 # ZeroDivisionError
2+'3’ #TypeError
iint(input(>>>) )
>>>qqq #ValueError
有人要问,try一段代码,只能预测一次错误类型么?当然不是!except支持多分支,可以try一次,except多次错误类型
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
try:
ret = int(input('number >>>'))
print(ret*'*')
except ValueError:
print('输入的数据类型有误')
except TypeError:
print('类型操作错误')
except Exception:
print('你错了,老铁')
3.在能够遇见错误类型的时候,我们可以用具体的错误类型,但是也有时候我们无法预测 ,这时候就要改用try except Exception:这种模式了
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
try:
ret = int(input('number >>>'))
print(ret)
except Exception:
print('你错了,老铁') #你错了,老铁
4.try除了提供except 预测错误,还提供了else finally 进阶功能,下面让我们举例说明吧
①else 没有异常的时候执行else中的代码
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
else:
没有异常的时候执行else中的代码
try:
print(2+3)
except TypeError:
print('你错了')
else:
print('你写的代码没有bug') #5 你写的代码没有bug
② finall不管代码是否异常,都会执行 常用在函数里做收尾工作,和return相遇的时候 依然会执行
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
def func():
try:
f = open('file','w')
print('你好')
return True
except Exception:
return False
finally:
print('执行finally了')
f.close()
func() #你好 执行finally了
6.我们来总结一下异常处理的重点
异常:程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
使用try和except就能处理异常
try是我们需要处理的代码
except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行except中的代码
except支持多分支,可以try一次,except多次错误类型
有没有一个能处理所有错误的类型 : Exception
有了万能的处理机制仍然需要把能预测到的问题单独处理
单独处理的所有内容都应该写在万能异常之前
else : 没有异常的时候执行else中的代码
finally : 不管代码是否异常,都会执行
finally和return相遇的时候 依然会执行
函数里做异常处理用,不管是否异常去做一些收尾工作