如何在 Python 中使用 gRPC 处理自定义异常?

How to handle custom exceptions with gRPC in Python?

我需要实现自定义异常来处理 Python 的 gRPC 请求错误。对于 HTTP 请求,它很简单 - 当出现错误代码等时,请求库可以很好地捕获它。我正在寻找类似的方法让 gRPC 执行类似的操作:

try:
    # send gRPC request
except SomeGRPCException as e:
    # custom handle

有没有办法像 Python 那样处理 gRPC 错误?或者对于 gRPC,它不会像示例中那样工作?

对于简单的 RPC 错误处理,您可以使用 try-catch:

try:
    response = stub.SayHello(...)
except grpc.RpcError as rpc_error:
    if rpc_error.code() == grpc.StatusCode.CANCELLED:
        pass
    elif rpc_error.code() == grpc.StatusCode.UNAVAILABLE:
        pass
    else:
        print(f"Received unknown RPC error: code={rpc_error.code()} message={rpc_error.details()}")

对于复杂的 RPC 错误处理,您可能需要利用尾随元数据: https://github.com/grpc/grpc/tree/master/examples/python/errors

在大多数情况下,try-catch 应该足够了。