代码之家  ›  专栏  ›  技术社区  ›  Alex

简单xmlrpc-python脚本中的属性错误

  •  0
  • Alex  · 技术社区  · 12 年前

    我有一个简单的xmlrpc服务器设置来启动SMTP服务器,代码如下:

    from SimpleXMLRPCServer import SimpleXMLRPCServer
    import smtplib
    
    # Create server
    server = SimpleXMLRPCServer(("localhost", 1025), allow_none = True)
    
    # add the introspection functions (system.listMethods, system.methodHelp 
    # and system.methodSignature)
    server.register_introspection_functions()
    
    def send(host, port):
        server = smtplib.SMTP((host, port), None)
    
    # register this method
    server.register_function(send, 'send')
    
    # start server
    server.serve_forever()
    

    我启动此服务器,并在客户端执行以下步骤:

    import xmlrpclib
    s = xmlrpclib.ServerProxy('http://localhost:1025')
    s.send('0.0.0.0',25)
    

    这导致了我不理解的以下错误:

    xmlrpclib.Fault: <Fault 1: "<type 'exceptions.AttributeError'>:'tuple' object has no attribute 'find'">
    

    这里的元组对象是什么意思?为什么代码需要查找属性?有什么想法可以帮助我让这些代码正常工作,即我能够发出xmlrpc请求来初始化(并在以后使用)xmlrpc服务器中的smtp服务器?

    谢谢 亚历克斯

    1 回复  |  直到 12 年前
        1
  •  1
  •   Bakuriu    12 年前

    smtplib documentation 上面写着 SMTP 类接受主机和端口的两个不同参数。

    因此,您应该以这种方式定义您的发送函数:

    def send(host, port):
        server = smtplib.SMTP(host, port)
    

    可能是 SMTP公司 构造函数需要一个字符串作为宿主,并使用find方法。 但是如果你传入元组 (host, port) 那么 AttributeError 生成。