您的位置:首页 > 编程语言 > Python开发

python 错误异常处理

2017-03-29 01:19 309 查看
通常异常处理分为三大类

语法错误 语意错误 逻辑错误

语法错误



语法错误一般都是少写了些标点符号

只要console看到SyntaxError 几乎都是语法错误

语义错误

例如 除以0为语义错误



逻辑错误

逻辑错误是比较难排查的,它跟代码无关,跟代码的设计有关

例如使用不当的循环,代码不报错,但是结果不是你想要的

这类的话要分析考虑你的流程,或者设计是不是有问题。

异常处理

代码有问题我们肯定要做出处理

就是把有可能出现错误的地方放到一个代码层面上去

try:

尝试

eccept 明确的类型错误:

except:

捕获

else:

都没捕获

try:
x = 5 / 0
print(x)
except ZeroDivisionError:
print('不能除0')
except:
print('其它错误')
else:
print('没有异常')




打印出异常的详细信息



例子2:

打印出类的name



如果打印出age会报错:



做出异常处理的代码:

class person:
def __init__(self,name):
self.name = name

p = person('peter')
try:
print(p.age)
except AttributeError as e:
print('属性错误 详细信息:',e)
except:
print('其它错误')
else:
print('没有错误')




finally 最终的意思

不管文件有没有异常最终都要处理的信息

那么什么时候加finally呢??

它是针对一些有需要释放资源的东西

例如 文件 数据库…. 读写一些内容遇到了问题,而文件已经打开了,中间如果遇到异常终止退出来的话,可能会影响后续的操作

所以要用finally

try:
f = open('date.txt')
f.read()
except:
print('文件操作遇到错误')
finally:
f.close()




异常有时候不一定非把它截断

但实际开发中有一个原则,在程序中有一个异常,不能就这么悄悄的过,你必须要处理 哪怕不处理至少要让它抛出来 终止程序

有的时候我们需要手动的抛出异常

手动抛出异常



手动抛出异常有什么意义呢???

例如:我们在c#,或者java定以了一个接口,而这个接口是必须要实现的,那这样我们可以把它写到一个方法里面

def method():
raise NotImplementedError('该方法代码还未实现')

method()




异常有很多详细参见官网的内置文档

https://docs.python.org/3.5/tutorial/errors.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 异常处理