boto3 s3.head_bucket仅在从变量读取时返回403禁止

时间:2019-11-23 23:17:38

标签: python variables amazon-s3 boto3

我有这个:

with open('my_file', 'r') as f_in:
    for i in f_in:
        response = s3.head_bucket(Bucket='i')
        print(response)

我希望获取my_file中那些存储桶的存储桶属性,但我得到:

  

botocore.exceptions.ClientError:调用HeadBucket操作时发生错误(403):禁止

如果我只输入一个存储桶名称,也会失败

如果我对存储区名称“(Bucket ='my-bucketoweiruowi')”进行硬编码,那么它将起作用!

如果我摆脱了for循环:

var = 'my-bucketoweiruow'
response = s3.head_bucket(Bucket='var')

...由于相同的403错误而失败

我这样删除了”:

with open('my_file', 'r') as f_in:
    for i in f_in:
        response = s3.head_bucket(Bucket=i)
        print(response)

...但是我收到另一个错误:

  

botocore.exceptions.ClientError:调用HeadBucket操作时出现错误(400):错误的请求”。

我有2个单独的AWS帐户,具有不同的存储桶以进行测试。行为相同。

看起来像进入循环时...断了吗?

1 个答案:

答案 0 :(得分:0)

就像在读取“ my_file”时一样,由于某种原因,跳转到下一行时,会在存储桶名称之间添加一个空行。

这意味着,如果我使用for循环打印内容,则会得到以下输出:

bucket1

bucket2

bucket3

因此,如果我删除了这些空白行,则说明一切正常:

with open('test','r') as f:
    for i in f:
        a = i.rstrip('\n')
        res = s3.head_bucket(Bucket=a)
        print(res)

结论:函数在找到空白行时似乎会发生故障。