67290


只今、『入門 Python3』を読みながら、  
JupyterLabを使ってPythonを学んでいます。  
OSはwindows10です。

『P.351 11.2.2.2 ZeroMQ』より。

以下のコードは、ZeroMQにより、パブサブシステムのサブスクライバを書いたものです。  
このサブスクライバは、メインクーンとペルシアンの猫をトピックに入れ、いま、パブリッシャからの配信を待とうとしています。

[code]

    import zmq
    
    # zmqソケットの定義をする。
    host = '127.0.0.1'
    port = 6789
    ctx = zmq.Context()
    sub = ctx.socket(zmq.SUB)
    sub.connect('tcp://%s:%s' % (host, port))
    
    # トピックを定義する。
    topics = ['maine coon', 'persian']
    
    # トピックの含んだメッセージだけを受信するように設定する。
    for topic in topics :
        sub.setsockopt(zmq.SUBSCRIBE, topic.encode('utf-8')
    
    # 受信したbytes列をデコードして表示する。
    while True :
        cat_bytes, hat_bytes = sub.recv_multipart()
        cat = cat_bytes.decode('utf-8')
        hat = hat_bytes.decode('utf-8')
        print('Subscrebe : $s wears a %s' % (cat, hat))
    
[/code]

問題は、これを起動したときに、

[code]

        while True :
        ^
    SyntaxError: invalid syntax
    
[/code]

と表示されることです。  
なにか初歩的なミスをしていますでしょうか？


CC BY-SA 4.0
2020-06-04T08:50:23.290
67280
2020-06-04T15:30:43.293
2020-06-04T08:58:00.423
2238
39908
question
python
ZeroMQを使った、パブサブシステムの構築


> sub.setsockopt(zmq.SUBSCRIBE, topic.encode('utf-8')

は`()`の対応がとれていません。最後に`)`が必要です。  
『入門 Python3』ではそうなっています。

[code]

    sub.setsockopt(zmq.SUBSCRIBE, topic.encode('utf-8'))
    
[/code]

> print('Subscrebe : $s wears a %s' % (cat, hat))

の`$s`も`%s`の誤りですね。

[code]

    print('Subscrebe : %s wears a %s' % (cat, hat))
    
[/code]


CC BY-SA 4.0
2020-06-04T14:31:33.410
67290
2020-06-04T15:30:43.293
2020-06-04T15:30:43.293
35558
35558
67280
answer