У меня есть следующий код для получения сообщений из очереди сообщений 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
здесь не решение?