Как бороться с пользовательским исключением, используя Pyro4? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь выставить свои классы, используя Pyro4.Проблема в том, что у моего класса есть пользовательское исключение, из-за которого Pyro4 не может его обработать.

Я пытался использовать сериализацию, но, похоже, ничего не работает.

У меня есть:

# exception class
class TestException(Expection):
    pass


# test class
@Pyro4.expose
class Test:

   def get_exception(self):
       raise TestException("This is a random exception.")

Pyro4 не может вызвать исключение TestException.Это выдает ошибку: {SerializedError} неподдерживаемый сериализованный класс: TestException

У кого-нибудь есть идеи, как это исправить?

Спасибо.

1 Ответ

0 голосов
/ 04 апреля 2019

Вам нужно будет научить Pyro (точнее, базовый сериализатор Serpent), что вы согласны десериализовать свой класс исключений, и как он должен это делать.В зависимости от этого вам также может потребоваться убедиться, что обе стороны (клиент и сервер) имеют доступ к одному и тому же исходному модулю, который определяет ваш класс TestException.

Это указано в документации.В частности, https://pyro4.readthedocs.io/en/stable/clientcode.html#changing-the-way-your-custom-classes-are-de-serialized

По соображениям безопасности это вызывает ошибку и требует усилий программиста.(Десериализация случайных классов, которые вы получаете из сети, опасна)

В конце может оказаться проще просто перехватить исключение на вашем сервере Pyro и вызвать вместо него одно из стандартных исключений Python.

...