2011-12-10 58 views
2

嘗試運行Python套接字http服務器時出現錯誤。爲什麼Python無法識別字符串類型的格式函數?

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

給這裏有什麼問題?

+0

Python版本? 2.5? – blahdiblah

+0

@blahdiblah:從OP的問題:'C:\ Python25> python index.py'所以是的,它是Python 2.5。 – ereOn

+0

是的,Python版本2.5 –

回答

4

Python website

format(value[, format_spec]) Convert a value to a 「formatted」 representation, as controlled by format_spec. The interpretation of format_spec will depend on the type of the value argument, however there is a standard formatting syntax that is used by most built-in types: Format Specification Mini-Language.

New in version 2.6.

所以我猜你應該升級你的Python版本。

或使用其他語法:

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

如果self.client_address[0]可以轉換爲字符串。

+0

非常感謝!我升級到Python 2.7,這工作! –

+0

@RCola:不客氣。很高興我能幫上忙。 – ereOn

相關問題