История изменений
Исправление upcFrost, (текущая версия) :
Отдельное поле имхо тоже не панацея. Хз как в сишке/жабе, а в пистоне это будет означать как минимум что ошибки сети, пойманные ошибки логики и не пойманные ошибки логики надо парсить по-разному.
- Если ты не поймал экспешн и не подсунул кастомную ошибку - он рвёт контекст и вызывает исключение на клиенте, которое нужно ловить
- Если ты его поймал - контекст не рвётся, исключения нет
- Если твой код идеален и все исключения на сервере пойманы или отсутствуют - ошибки сети один фиг надо ловить
В сухом остатке у тебя try-catch и на сервере, и на клиенте, при том на сервере он еще и имеет «общий» clause что не очень круто. Учитывая что код/спек в целом для внутреннего пользования имхо проще таки задокументировать поведение и ловить эксепшн один раз
Алсо, раз уж ты ссылался на доку: https://pkg.go.dev/google.golang.org/grpc/status
gRPC service handlers should return an error created by this package, and gRPC clients should expect a corresponding error to be returned from the RPC call.
Именно handlers и clients, а не protocol implementations. Так что это не магия а вполне таки официальное поведение (только что нашёл этот кусок если честно)
Исходная версия upcFrost, :
Отдельное поле имхо тоже не панацея. Хз как в сишке/жабе, а в пистоне это будет означать как минимум что ошибки сети, пойманные ошибки логики и не пойманные ошибки логики надо парсить по-разному.
- Если ты не поймал экспешн и не подсунул кастомную ошибку - он рвёт контекст и вызывает исключение на клиенте, которое нужно ловить
- Если ты его поймал - контекст не рвётся, исключения нет
- Если твой код идеален и все исключения на сервере пойманы или отсутствуют - ошибки сети один фиг надо ловить
В сухом остатке у тебя try-catch и на сервере, и на клиенте, при том на сервере он еще и имеет «общий» clause что не очень круто. Учитывая что код/спек в целом для внутреннего пользования имхо проще таки задокументировать поведение и ловить эксепшн один раз
Алсо, раз уж ты ссылался на доку: https://pkg.go.dev/google.golang.org/grpc/status
gRPC service handlers should return an error created by this package, and gRPC clients should expect a corresponding error to be returned from the RPC call.
Именно handlers и clients, а не protocol implementations.