首页 > 解决方案 > 使用用户输入循环下面的代码

问题描述

想要一段代码,我在其中询问队列名称,然后使用提供的名称创建新的 sqs 队列。如果队列名称已经存在,则希望提示循环以获取新名称

import boto3

sqs = boto3.resource('sqs')
all_queues = sqs.queues.all()


while True:
    sqs_queue_name = input("Enter queue name: ")
    for queue in all_queues:
        if queue.attributes['QueueArn'].split(":")[-1] == sqs_queue_name:
            print(f"Queue {sqs_queue_name} already exists")
            continue
        else:
            queue = sqs.create_queue(QueueName=sqs_queue_name, Attributes={'DelaySeconds':'5'})
            print(queue.url)
            print(queue.attributes.get('DelaySeconds'))

我做错了什么?代码一直问我队列名称,所以while循环有问题,看不出它有什么问题......

标签: python-3.xwhile-loopboto3amazon-sqs

解决方案


假设调用 all_queues = sqs.queues.all() 返回一个列表,

我会在创建一个新队列时打破 while True: 循环。

我也会消除那个内部 for 循环。相反,我会列出队列名称,然后检查我选择的队列名称是否在该列表中。如果是,我需要不断向用户询问新的队列名称。如果没有,请创建新队列并跳出循环。

像这样的东西:

import boto3

sqs = boto3.resource('sqs')
all_queues = sqs.queues.all()
queue_names = [x.attributes['QueueArn'].split(":")[-1] for x in all_queues]
while True:
    sqs_queue_name = input("Enter queue name: ")
    if sqs_queue_name in queue_names:
        print(f"Queue {sqs_queue_name} already exists")
        continue
    else:
        queue = sqs.create_queue(QueueName=sqs_queue_name, Attributes=   {'DelaySeconds':'5'})
        print(queue.url)
        print(queue.attributes.get('DelaySeconds'))
        break

推荐阅读