请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

用户服务中的“创建用户”处理异常的方式

@logger.catch
def CreateUser(self, request: user_pb2.CreateUserInfo, context):
    # 新建用户, web开发 - 表单验证 没有必要做 web层做就好了 srv服务层尽可能通用一点
    try:
        User.get(User.mobile == request.mobile)
        context.set_code(grpc.StatusCode.ALREADY_EXISTS)
        context.set_details("用户已存在")
        return user_pb2.UserInfoResponse()
    except DoesNotExist as e:
        pass

    user = User()
    user.nick_name = request.nickName
    user.mobile = request.mobile
    user.password = pbkdf2_sha256.hash(request.passWord)
    user.save()
    return self.convert_user_to_rsp(user)

老师您好,我想问的是,当用户已存在然后创建用户时,使用“context.set_code(grpc.StatusCode.ALREADY_EXISTS)
context.set_details(“用户已存在”)”这种方式虽然能返回错误码和细节,但是并不能处理异常吧?请问这种时候是不是有更好的处理方式?

正在回答 回答被采纳积分+3

1回答

bobby 2023-04-07 17:46:51

context.set_details(“用户已存在”)”这种方式虽然能返回错误码和细节,但是并不能处理异常吧? 这句话是什么意思,我不太明白

0 回复 有任何疑惑可以回复我~
  • 提问者 0沉默使者0 #1
    就是一旦这里触发grpc.StatusCode.ALREADY_EXISTS之后,我发现测试的时候如果在调用CreateUser()这个服务之后如果还调用其他服务,会停止进程。。比如:
    user.create_user("bobby", "18787878787", "admin123")
    user.get_user_by_id(1)
    user.get_user_by_mobile("18782222225")
    
    这样后面那两句就执行不到了。。我看您之前处理“用户不存在”(NOT_FOUND)的时候是把异常处理之类的context.set_code、context.set_details放进try-except的except DoesNotExist as e里的,这样好像就不影响后续代码的执行
    回复 有任何疑惑可以回复我~ 2023-04-08 07:56:08
  • bobby 回复 提问者 0沉默使者0 #2
    这里服务端设置了错误码。python调用的话会抛出异常,要使用try进行异常捕获才行
    回复 有任何疑惑可以回复我~ 2023-04-09 18:39:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信