Я хочу изменить ловушку исключения для возврата моей пользовательской ошибки вместо удаленной ошибки. Вот мой пример кода:
server.py
import zerorpc
import c
class ExceptionalRPC(object):
def bad(self):
raise KeyError
zero_ctx = zerorpc.Context()
test_middleware = c.ServerBeforeExecMiddleware()
zero_ctx.register_middleware(test_middleware)
s = zerorpc.Server(ExceptionalRPC(), context=zero_ctx)
s.bind("tcp://0.0.0.0:4242")
s.run()
client.py
import zerorpc
import c
zero_ctx = zerorpc.Context()
test_middleware = c.ServerBeforeExecMiddleware()
zero_ctx.register_middleware(test_middleware)
c = zerorpc.Client(context=zero_ctx)
c.connect("tcp://127.0.0.1:4242")
try:
c.bad()
except Exception as b:
print(type(b))
c.py
class ServerBeforeExecMiddleware(object):
def __init__(self):
self.called = False
def server_inspect_exception(self, request_event, reply_event, task_context, exc_infos):
args = list(reply_event.args)
args.append({"name":"mahdieh"})
reply_event._args = tuple(args)
print(type(reply_event.args),reply_event.args)
def client_handle_remote_error(self, event):
for i in event.args:
print(type(i),i)
, когда я запускаю server.py с python 2.7 и client.py с python 3.6, вывод выглядит примерно так:
{b'name': b'mahdieh'}
Но когда я запускаю server.py с python 2.7 и client.py с python 2.7, вывод выглядит примерно так: {'name': 'mahdieh'}
Есть ли инструменты для решения этой проблемы?