python代码异常处理及返回状态码给外层程序

最近刚开始进行工程对接,我们是提供基础服务的一方,除了约定接口给下一步提供服务的团队,在工程对接过程中,频繁感受到了对接团队对异常处理的要求。

我们是python提供服务,他们是C#调用我们的服务,除了接口问题,他们还需要了解我们服务的执行状态,是正常执行结束,还是遇到异常,代码退出或死掉,他们那边要针对状态来提供下一步的服务,或针对问题重启服务,或哪里有问题进行提示修改,以使服务正常运行。

由于我们之前的代码是经过测试完全符合一套运行流程的,只要按照对应要求执行就可以正常执行完毕并获得结果,所以提供的数据或参数标准是我们确定的,但是做工程的话需要解决用户的各种问题,防止用户输入出错,导致代码不能正常执行。

所以根据下一步服务对接的要求,我们把一些我们不会犯的错做了一个预防措施,即对代码增加了异常处理并及时返回状态码给外层调用程序,以监控代码的执行。

1、对于异常处理,其实大家也很熟悉,就是常见的try…except…

下面是查找的资料:
在这里插入图片描述

try:
    可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:
    处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
    处理异常的代码块2
except  [Exception]:
    处理其它异常

个人用法:

try:
	"可能出问题的函数xxx = xx()"
except:
"#知道产生的具体错误可直接限定,如 except (ValueError, ArithmeticError):"
	pass
	"或者其他处理方式以使代码正常往下执行"

查找的示例:

try:
    xxxxxx
except Exception as e:
    # 访问异常的错误编号和详细信息
    print(e.args)
    print(str(e))
    print(repr(e))

2、返回代码执行的状态码

import sys

try:
	"要执行的代码xxx"
	
	print("xxx功能执行完毕")"或者打印代码执行成功提示,但是打印不提供执行状态"
except:
	"如果执行异常则进入except"
	sys.exit(-1)"返回-1说明代码执行异常,-1会返回给外层代码,代码执行终止"
	print("xxx执行异常退出提示")

sys.exit(0)"代码正常执行完毕返回0,0会返回给外层调用程序获取其执行状态,可添加在某大块功能调用结束后,"
"不需要在细节函数添加,会给外层代码造成干扰"

关于状态码的说明:返回的数值(0,-1,xxx等等)作为状态码可被外层程序捕获。
sys.exit()的退出比较好用,调用后会引发SystemExit异常,可以捕获此异常做清理工作

exit(0)"0表示代码正常执行结束退出,其他数值(1-127)为不正常,可抛异常事件供捕获"
exit(-1)"-1表示代码执行异常退出"

"也可以是返回具体错误进行显示"
sys.exit('xxx执行错误,请检查!!!')

还有一个退出方式os._exit(),会直接终止python代码的执行,主要用于线程中出错终止,sys.exit()主要用于主进程终止

"仿照sys.exit()进行理解"
import os
try:
    os._exit(0)
except:
    print('code die')

一般情况下使用sys.exit()即可,一般在fork出来的子进程中使用os._exit()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦枕星河~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值