为什么Python无法识别类型字符串上的格式函数?

时间:2011-12-10 09:18:44

标签: python

尝试运行Python套接字http服务器时遇到错误。

    import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.send(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

错误:

C:\Python25>python index.py
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 2506)
Traceback (most recent call last):
  File "C:\Python25\lib\SocketServer.py", line 222, in handle_request
    self.process_request(request, client_address)
  File "C:\Python25\lib\SocketServer.py", line 241, in process_request
    self.finish_request(request, client_address)
  File "C:\Python25\lib\SocketServer.py", line 254, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Python25\lib\SocketServer.py", line 521, in __init__
    self.handle()
  File "index.py", line 15, in handle
    print "{} wrote:".format(self.client_address[0])
AttributeError: 'str' object has no attribute 'format'
----------------------------------------

我的客户:

import socket
import sys

HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # Connect to server and send data
    sock.connect((HOST, PORT))
    sock.send(data + "\n")

    # Receive data from the server and shut down
    received = sock.recv(1024)
finally:
    sock.close()

print "Sent:     {}".format(data)
print "Received: {}".format(received)

这是Python official website

上给出的示例

这里有什么问题?

1 个答案:

答案 0 :(得分:4)

来自Python website

  

format(value [,format_spec])将值转换为“格式化”   表示,由format_spec控制。解释   但是,format_spec将取决于value参数的类型   大多数内置程序都使用标准格式化语法   类型:格式规范迷你语言。

     

版本2.6中的新内容。

所以我想你应该升级你的Python版本。

或使用其他语法:

print "%s wrote:" % self.client_address[0]

如果self.client_address[0]可以转换为字符串。