Python:获取"'socket'对象不可下标"

问题描述 投票:0回答:1
def sendToAllClients(messageSender, message):
    # Formatting the message
    messageHeader = f"{len(message) :< {HEADER_LENGTH}}".encode('utf-8')
    messageList = {'header': messageHeader, 'data': message.encode('utf-8')}
    # Send the message to all clients
    for client in clients:
        client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])


def sendMessageTo(messageSender, message, messageTargetUsername):
    # Formatting the message
    messageHeader = f"{len(message) :< {HEADER_LENGTH}}".encode('utf-8')
    messageList = {'header': messageHeader, 'data': message.encode('utf-8')}
    # Go through all clients
    for client in clients:
        # If the client has the same username as the target, send the message only to them
        if clients[client].get('data').decode('utf-8') == messageTargetUsername:
            client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])

每当我尝试使用sendMessageTo方法时,我都会得到错误 "TypeError: 'socket' object is not subscriptable",但当我使用SendToAllClients方法时却没有,有什么想法可以解释为什么会发生这种情况吗?

似乎给出错误的那行是。

client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])

但在sendToAllClients方法中,几乎同样的一行也能用?

python typeerror
1个回答
0
投票

不知道什么是 clients 是,这将是很难回答的。但我会尝试一件事。

而不是

if clients[client].get('data').decode('utf-8') == messageTargetUsername:

试试

if client.get('data').decode('utf-8') == messageTargetUsername:

我在这里假设 clients[client] 没有方法 get因此,你得到的错误。试试看是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.