Как решить проблему двоичного преобразования zerorpc между python2.7 и python3.x? - PullRequest
0 голосов
/ 25 марта 2019

Я хочу изменить ловушку исключения для возврата моей пользовательской ошибки вместо удаленной ошибки. Вот мой пример кода:

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'}

Есть ли инструменты для решения этой проблемы?

...