gpt4 book ai didi

python - 使用 grpc 向客户端发送服务器错误

转载 作者:太空狗 更新时间:2023-10-29 20:40:31 26 4
gpt4 key购买 nike

让我们考虑一个简单的服务:

service Something {
rpc Do(Request) returns Response;
}

message Request {
string field = 1;
}

message Response {
string response = 1;
}

假设我必须对 Request.field 进行一些检查,如果该字段无效,我想引发客户端错误:

class MyService(proto_pb2.SomethingServicer):

def Do(self, request, context):
if not is_valid_field(request.field):
raise ValueError("Damn!") # Or something like that
return proto_pb2.Response(response="Yeah!")

与以下客户端:

channel = grpc.insecure_channel(...)
stub = proto_pb2.SomethingStub(channel)
try:
response = stub.Do(proto_pb2.Request(field="invalid"))
except grpc.RpcError as e:
print(e)

<_Rendezvous of RPC that terminated with (StatusCode.UNKNOWN, Exception calling application: Damn!)>

所以我可以在技术上处理错误。我的问题是......有更好的方法吗?有什么好的方法可以更改消息描述?我们可以更改状态代码吗?

最佳答案

是的,有更好的方法。您可以使用 ServicerContext.set_details 更改状态详细信息方法,您可以使用 ServicerContext.set_code 更改状态代码方法。我怀疑您的服务人员看起来像

class MyService(proto_pb2.SomethingServicer):

def Do(self, request, context):
if not is_valid_field(request.field):
context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
context.set_details('Consarnit!')
return proto_pb2.Response()
return proto_pb2.Response(response='Yeah!')

.

关于python - 使用 grpc 向客户端发送服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40998199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com