异常处理
在python中管理发生的错误就会创建‘异常’--特殊对象
异常一般使用try-except代码块处理,可以反馈友好的错误信息
try:
print 5/0
except ZeroDivisionError:
print 'error divide'
else:
print 'correct result'
try-except-else代码块的工作原理大致如下:
Python尝试执行try代码块中的代码;
只有可能引发异常的代码才需要放在try语句中。
有一些仅在try代码块成功执行时才需要运行的代码,应放在else代码块中。
except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。
FileNotFoundError 文件不存在
失败的时候顺其自然可以使用pass
Python的错误处理结构让你能够细致地 控制与用户分享错误信息的程度,要分享多少信息由你决定
1,finally块
保证异常发生时稳定的执行处理操作
try:
data = handle.read()
finally:
handle.close()
向上传递异常的同时可靠关闭句柄
2,else块
使用except与else可以清晰区分不同异常的处理
3,混合使用
需要建立完整的过程,切分不同块的职能
try,except,else,finally
eg,处理json读取
def divide_json(path):
handle = open(path, 'r+') # may IOError
try:
data = handle.read() # may UnicodeDecodeError
op = json.loads(data) # may raise ValueError
value = (op['num']/op['value']) # may ZeroDivisionError
except ZeroDivisionError as e:
return UNDEFINED
else:
result = json.dumps(value)
handle.seek(0)
handle.write(result) # may IOError
return value
finally:
handle.close()