异常
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时,我们需要捕获处理它,否则程序会终止执行。
异常的处理
捕获异常可以使用 try/except 语句。
该语法用来检测try 语句块中的错误,从而让except 语句捕获异常信息并处理。
- 语法规则:
try:
正常的操作<运行的>
..................
except <异常类> as <变量>:
发生异常,执行这块代码
...........................
else:
如果没有异常发生
finally:
<语句>不管如何,最后一定要执行的代码。
- 有异常处理的情况:
try:
print("开始计算")
a = 2
b = 0
result = a/b
print("计算结果为:{0}".format(result))
except Exception as e:
print("除数不能为0")
else:
print("无异常出现")
finally:
print("done")
输出结果:
根据输出结果,先执行try语句,遇到异常则停止执行下面的语句
print("计算结果为:{0}".format(result)) #停止执行
跳转至错误处理代码,也就是 except 语句块;执行完except后执行finally语句块;不执行else语句块。
- 无异常出现情况
try:
print("开始计算")
a = 2
b = 1
result = a/b
print("计算结果为:{0}".format(result))
except Exception as e:
print("除数不能为0")
else:
print("无异常出现")
finally:
print("done")
输出结果:
可以看出,无异常出现时,先后执行 try 、else 和finally 语句块,没有执行except 语句块。
- raise抛出错误
try:
print("开始计算")
a = 2
b = 0
result = a/b
print("计算结果为:{0}".format(result))
except Exception as e:
print("除数不能为0")
raise e #捕获异常
else:
print("无异常出现")
finally:
print("done")
输出结果:
从输出结果看出,错误类型为 ZeroDivisionError。
- 异常信息规范输出
在常见的前后端分离开发环境中,对于异常信息通常都是按照约定格式,返回json字符串,从而将异常信息记录下来。
下面是一个示例
import json
def test():
result = dict()
try:
print(2/0)
except Exception as e:
result["msg"] = "Division can not be 0"
result["code"] = 403
result["data"] = [{"a": 1}, {"b": 2}]
finally:
return json.dumps(result) #字典转换为json串
if __name__ == '__main__':
print(test())
输出结果:
{"msg": "Division can not be 0", "code": 403, "data": [{"a": 1}, {"b": 2}]}
自定义模块调用
例子:先写一个model,在调用:
import json
def test():
result = dict()
try:
print(2/0)
except Exception as e: #Exception 异常类 ,e 是一个变量
result["msg"] = ""
result["code"] = 403
result["data"] = [{"a": 1}, {"b": 2}]
print("发生异常,除数不能为0")
raise e # 不注释时,可以抛出异常
finally:
return json.dumps(result)
if __name__ == '__main__':
print(test())
事先做好的model,输出结果:
现在import导入:
from 第10课.demon1 import test
if __name__ == '__main__':
result = test()
print(result)
输出结果,结果是一样的。