Python 字符串变量不';无法正确打印

Python 字符串变量不';无法正确打印,python,python-2.7,sockets,chat,Python,Python 2.7,Sockets,Chat,因此,我正在编写一个多客户端聊天,我想在消息前面显示每个客户端的名称。当我在主函数中打印变量“client_name”(行“clients_dictionary[current_socket.getpeername()]”返回它应该返回的值,但不返回任何值)时,它本身显示得很好,但当我尝试将它连接到消息体(“data=client_name+”:“+data”)时,它打印为:“变量数据中的内容”。我做错了什么 import socket import select HOST = "" PORT

因此,我正在编写一个多客户端聊天,我想在消息前面显示每个客户端的名称。当我在主函数中打印变量“client_name”(行“clients_dictionary[current_socket.getpeername()]”返回它应该返回的值,但不返回任何值)时,它本身显示得很好,但当我尝试将它连接到消息体(“data=client_name+”:“+data”)时,它打印为:“变量数据中的内容”。我做错了什么

import socket
import select
HOST = ""
PORT = ""
open_client_sockets = []
messages_to_send = []
clients_dictionary = {}


def handle(server_socket):
    client_socket, client_address = server_socket.accept()
    open_client_sockets.append(client_socket)
    client_name = client_socket.recv(1024)
    clients_dictionary[client_address] = client_name


def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((HOST, PORT))
    server_socket.listen(10)
    while True:
        r, w, x = select.select([server_socket] + open_client_sockets, open_client_sockets, [])
        for current_socket in r:
            if current_socket == server_socket:
                handle(server_socket)
            else:
                try:
                    data = current_socket.recv(1024)
                except socket.error:
                    data = ""
                if data == "":
                    open_client_sockets.remove(current_socket)
                else:
                    client_name = clients_dictionary[current_socket.getpeername()]
                    data = ": " + data
                    data = client_name + data
                    print data
                    messages_to_send.append((current_socket, data))
                    w.remove(current_socket)
                    for client_socket in w:
                        if client_socket != current_socket:
                            client_socket.send(data)

if __name__ == "__main__":
    main()

无论如何,您最好使用python字符串格式:

chat_msg = '{}: {}'.format(client_name, data)

如果您在
else
块中的
print data
之前打印出
client\u name
,它仍然显示良好?是的,我看不出来。我把它放在“data=”:“+data”行上方,它打印了我在客户端输入的名称。这很奇怪……如果是我,我会放一个
导入pdb;pdb.在
打印数据
调用之前设置_trace()
行,看看你能以交互方式找出什么。它刚刚打印:>~path~\server.py(39)main()->打印数据(pdb)
(pdb)
部分应该是一个交互提示,所以你可以像Python解释器一样使用它。因此,您可以从那里打印出变量的值,尝试以交互方式连接它们,检查对象类型;不管你想做什么。您的程序将在代码中的该点暂停,直到您输入
c
以继续