0

WSHandler 接続 (Tornado、Python) のリストにさらに値を追加する必要があります。のように接続をリスト self.connections.append(self)に追加していますが、次のような情報を追加する必要がありself.connections.append({'id': self, 'keyword' : ''})ます (後で現在のselfID を見つけてキーワードを置き換えます)。

selfオブジェクト(のようなself.connections[self].filter = 'keyword')に基づいてリストに追加しようとすると、TypeError: list indices must be integers, not WSHandler.

では、どうすればこれを行うことができますか?

編集:次のように適切なオブジェクトを見つけることができました:

def on_message(self, message):
    print message
    for x in self.connections:
        if x['id'] == self:
            print 'found something'
            x['keyword'] = message
            print x['keyword']
            print x

さて、どのように辞書全体を削除しconnectionsますか? self.connections.remove(self)もちろん、もう機能しません。

4

2 に答える 2

3

このユース ケースでは、接続のリストは必要ありません。これをオブジェクト自体に格納する方が簡単な場合があります。を使用するだけself.filter = 'keyword'です。

さもないと:

for dict in self.connections:
    if dict['id'] == self:
        dict['keyword'] = 'updated'

または、明確さよりも簡潔さを優先する場合は、次のようにします。

for dict in [dict for dict in self.connections if dict['id'] == self]:
    dict['keyword'] == 'updated'

削除するには、次を使用します。

for dict in self.connections:
    if dict['id'] == self:
        self.connections.remove(dict)
于 2012-10-02T11:52:19.617 に答える
1

はリストなのでself.connections、整数を使用してのみインデックスを作成できます(エラーが示すように)。 selfこれはWSHandlerオブジェクトであり、整数ではありません。

私はトルネードの専門家ではないので、ハンスの言うことを試してみてください。

それでも前述の方法で実行する必要がある場合は、次のことを試してくださいself.connections[self.connections.index(self)]。リスト内で自己オブジェクトを見つけます。

于 2012-10-02T11:54:28.200 に答える