为什么xmlrpc客户端无法向xmlrpc服务器过程访问的列表中添加项目?

2 投票
1 回答
9021 浏览
提问于 2025-04-16 14:49

服务器代码(基于Python库的参考):

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ()

server = SimpleXMLRPCServer(("127.0.0.1", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

l = list()

def say_hi():
    return 'hi !'

def append(event):
    l.append(event)

server.register_function(say_hi)
server.register_function(append)

server.serve_forever()

客户端(从另一个终端窗口启动的解释器):

>>> from xmlrpc.client import ServerProxy
>>> s = ServerProxy('http://127.0.0.1', allow_none=True)
>>> s.say_hi()
'hi !'
>>> s.append(1)
Traceback (most recent call last):
...
xmlrpc.client.Fault(Fault 1: "<class 'TypeError'>:cannot
                    marshal None unless allow_none is enabled")

我该怎么解决这个问题?我是不是用错了xmlrpc?

1 个回答

12

你的XMLRPC服务器出现了错误,因为它无法处理None这个值。你需要在服务器的构造函数中添加allow_none=True这个参数:

server = SimpleXMLRPCServer(("127.0.0.1", 8000),
                        requestHandler=RequestHandler, 
                        allow_none=True)

撰写回答