Skip to main content
 首页 » 编程设计

python之为什么 xmlrpc 客户端不能将项目附加到可通过 xmlrpc 服务器过程访问的列表

2025年05月04日12xxx_UU

服务器代码(基于 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?

请您参考如下方法:

您的 XMLRPC 服务器正在引发错误,因为它无法编码 None。您需要将 allow_none=True 添加到服务器构造函数:

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