python 异常处理

异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在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)

输出结果,结果是一样的。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值