gRPC提供适合所使用语言的错误处理。在
如您所述,在Go server中,您将返回一个错误:func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error {
for {
in, err := stream.Recv()
if err == io.EOF {
return nil
}
if err != nil {
return err
}
...
在Python客户机中,您在try语句中执行API调用(人为的示例,因为官方文档没有演示这一点):
^{pr2}$
相反,在Python服务器中,您可以设置上下文并(可选)引发异常:{来自a2}:def TellFortune(self, request, context):
"""Returns the horoscope and zodiac sign for the given month and day.
errors: invalid month or day, fortune unavailable
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def UnUn(self, request, context):
if _application_common.UNARY_UNARY_REQUEST == request:
return _application_common.UNARY_UNARY_RESPONSE
else:
context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
context.set_details('Something is wrong with your request!')
return services_pb2.Down()
在Go client中,error对象是结果参数之一:stream, err := client.RouteChat(ctx)
if err != nil {
log.Fatalf("%v.RouteChat(_) = _, %v", client, err)
}
不幸的是,官方文档似乎没有明确涵盖错误处理实践。在