Нет привязки для нелокальной переменной в функции обратного вызова Python - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть следующий код для получения сообщений из очереди сообщений RabbitMQ:

import pika

HOST = 'localhost'
QUEUE = 'hello'

with pika.BlockingConnection(pika.ConnectionParameters(host=HOST)) as conn:
    with conn.channel() as channel:
        channel.queue_declare(queue=QUEUE)

        result = ''
        def callback(channel, method, properties, body):
            nonlocal result
            result = body
            channel.stop_consuming()

        channel.basic_consume(queue=QUEUE,
                              on_message_callback=callback,
                              auto_ack=True)
        channel.start_consuming()

        print("Recieved '{}'".format(result))

Я получаю SyntaxError: no binding for nonlocal 'result' found ошибку в операторе nonlocal. Этот ответ использует nonlocal, я думаю, точно так же. global отлично работает в этом случае, чего я не понимаю. Почему nonlocal здесь не решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...