2016-04-17 8 views
0

私は辞書の "エントリ"に関数を代入しているところに問題があります。 これは、コードから次のとおりです。辞書キーに関数を割り当てる - Python

assignment[message[0]] = self.request.sendall 
if members == 0: 
    for request in assignment: 
     request("PING") 
     print(request) 
     print("Sent PING") 

そして、これはトレースバックです。私が理解しているところから、私は文字列を呼び出そうとしていると思っています。

Traceback (most recent call last): 
File "C:\Python27\lib\SocketServer.py", line 295, in_handle_request_noblock 
self.process_request(request, client_address) 
File "C:\Python27\lib\SocketServer.py", line 321, in process_request 
self.finish_request(request, client_address) 
File "C:\Python27\lib\SocketServer.py", line 334, in finish_request 
self.RequestHandlerClass(request, client_address, self) 
File "C:\Python27\lib\SocketServer.py", line 655, in __init__ 
self.handle() 
File "C:\Users\Radek Golan\Desktop\Sequencer\Sequencer_Server.py", line 58, in handle 
request("PING") 
TypeError: 'str' object is not callable 

そして、これは辞書が出てリストされている:私は間違って何をやっている

{'nick1': <bound method _socketobject.sendall of <socket._socketobject object at 0x02883EA0>>, 'nick2': <bound method _socketobject.sendall of <socket._socketobject object at 0x02883FB8>>} 

答えて

2

ここにあなたの反復:

for request in assignment: 

はあなたキー辞書のを与えています。値ではありません。あなたが道を反復するときの値を取得するには、希望:

for request in assignment: 
    print(assignment[request]) 

または

for key, value in assignment.items(): 
    print("key {}".format(key)) 
    print("value {}".format(value)) 

さらにシンプルなだけではなく、valuesを使用します。

for value in assignment.values(): 
    print(value) 

は辞書を見てみましょう詳細を知るためのドキュメント:

https://docs.python.org/3/tutorial/datastructures.html#dictionaries

+1

または 'for value in assignent.values()'。 – GingerPlusPlus

+0

@GingerPlusPlus ugh ....もちろん!ありがとうございました – idjaw

+1

Python 2では 'for value in assignment.itervalues()'となりました。 – letmutx

0

forループの辞書をキーで繰り返します。 request変数の変数は"nick1"になります。 assignment[request]("Ping")が必要です。

関連する問題