#python #python-3.x #pyro4
#python #python-3.x #pyro4
Вопрос:
Я пытаюсь представить свои классы с помощью 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:
Вам нужно будет научить Pyro (или, скорее, базовый Serpent serializer), что вы согласны десериализовать свой пользовательский класс исключений, и как он должен это делать. В зависимости от этого вам также может потребоваться убедиться, что обе стороны (клиент и сервер) имеют доступ к одному и тому же исходному модулю, который определяет ваш класс TestException.
Это в документации. В частности, https://pyro4.readthedocs.io/en/stable/clientcode.html#changing-the-way-your-custom-classes-are-de-serialized
Из соображений безопасности это вызывает ошибку и требует усилий программиста. (Десериализация случайных классов, которые вы получаете из сети, опасна)
В конце концов, может быть проще просто перехватить исключение на вашем сервере Pyro и вместо этого вызвать одно из стандартных исключений Python.