Я пытаюсь передать клиенту произвольные исключения с сервера XMLRPC (оба сценария Python, типы исключений определены с обеих сторон). В ActiveState Recipes имеется примерная реализация на стороне клиента, которая анализирует возвращенную "faultString", сравнивает ее со списком известных исключений и, если она обнаруживается, вызывает это исключение (вместо того, чтобы заключить его в xmlrpclib.Fault
).
Пример ответа об исключительной ситуации XMLRPC:
<?xml version='1.0'?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>faultString</name>
<value>
<string>ValueError:</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
Рецепт ActiveState разбивает строку «ValueError:» и сравнивает «ValueError» с ValueError.__name__
(что в allowed_errors = [ValueError, TypeError]
, см. Ссылку выше).
Можно ли передать все исключения, подобные этой, то есть автоматически вызвать любое исключение (производное от Exception
или некоторого другого базового класса) на стороне клиента (после того, как оно было создано на сервере)?
Сценарий ActiveState работает, но я не хочу регистрировать каждое исключение, которое может быть брошено (должно быть в allowed_errors
).
(Бонусный вопрос: есть ли другая технология, кроме XMLRPC, которая могла бы правильно решить эту проблему? Pyro?)