【问题标题】:Boto3 and S3: For loop finishing after iterating through only 6 out of 200 S3 buckets in the listBoto3 和 S3:在列表中仅迭代 200 个 S3 存储桶中的 6 个后完成循环
【发布时间】:2025-11-30 16:00:02
【问题描述】:

我正在尝试在列表中列出和记录所有 S3 存储桶 PublicAccessBlockConfiguration。问题是,循环结束并在仅迭代约 200 个桶中的 6 个后打印“No Public Access”。

我对代码进行了静态测试,写了一个我知道存在并具有 PublicAccessBlockConfiguration 的存储桶的名称,并且它起作用了。

但是当遍历列表时,同一个桶没有出现。这是为什么呢?

def check_bucket_access_block():
    try:
        for bucket in filtered_buckets:
            response = s3client.get_public_access_block(Bucket=bucket['Name'])
            for key, value in response['PublicAccessBlockConfiguration'].items():
                logger.info('Bucket Name: {}, {}: {}'.format(bucket['Name'], key, value))
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == 'NoSuchPublicAccessBlockConfiguration':
            print('\t no Public Access')
        else:
            print("unexpected error: %s" % (e.response))

check_bucket_access_block()

【问题讨论】:

    标签: python amazon-s3 boto3 devops botocore


    【解决方案1】:

    您的 try/except 块在for 循环的之外。因此,当产生错误时,退出循环。

    尝试将try/except 放在 for 循环中,如下所示:

    def check_bucket_access_block():
        for bucket in filtered_buckets:
            try:
                response = s3client.get_public_access_block(Bucket=bucket['Name'])
                for key, value in response['PublicAccessBlockConfiguration'].items():
                    logger.info('Bucket Name: {}, {}: {}'.format(bucket['Name'], key, value))
            except botocore.exceptions.ClientError as e:
                if e.response['Error']['Code'] == 'NoSuchPublicAccessBlockConfiguration':
                    print('\t no Public Access')
                else:
                    print("unexpected error: %s" % (e.response))
    

    【讨论】:

    • 谢谢!它现在工作得很好。
    最近更新 更多