菜鸟求助关于python异常的问题
1. 一般情况下业务的错误,比较常规的做法是丢异常好呢,还是返错好?希望能点稍微详细的说明。(从正规项目开发的角度)
这里指的业务错误比如下面这个:
def trans_login(name, password):
u = db.GetUser(name)
if u:
if u.checkPass(password):
u.setStatus(S_LOGIN)
return True
else:
raise ServiceException, "Password Error!"
else:
raise ServiceException, "User is not Existed!"
2. 我一般会用if __name__ == '__main__': 给模块加个测试用例,就是用assert()判断函数执行,
在不用返回码,丢异常的情况下,测试用例如何写。
[解决办法]
1. 第一种情况绝对应该“return False”。第二种情况(user is not existed)有点模糊,我会选“return False”。
2. 这样:
try:
this_Function_Need_to_Raise_Exception()
assert(False, "An exception should have been raised")
except ExpectedException:
assert(True, "I've been waiting for you, ex")
except Exception:
assert(False, "No, not you.")
[解决办法]
这个跟返回值没关系吧
关键是这个异常是否可以解决,或者说你希望异常在哪个层面上解决
像java里的异常
调用时遵循严格的异常接口声明,意思是调用者必须清晰明了该函数可能抛出异常,你这个地方如果仅仅用True和False来标识,是否太单薄了些
个人建议,如果上层不想处理异常了,这个地方返回值类型可以再丰富些,比如-1代表啥,-2代表啥,0代表成功等