Boto API调用返回“指定的存储桶不存在”,即使我可以在控制台中看到它并使用Boto列出它

时间:2014-03-22 14:07:10

标签: python amazon-web-services amazon-s3 boto

对于某些背景,此代码是较大脚本的一部分。我目前正在使用.boto配置文件作为我的信用卡。我能够使用boto API调用列出所有存储桶以及创建存储桶,但是,这部分代码给了我一些问题,它看起来很正常(代码本身实际上在以前的版本中工作,现在看来要挂断了)

#!/usr/bin/python
import boto
from boto.s3.connection import S3Connection

conn = S3Connection()
n = "zapbucketx"
rs = conn.get_all_buckets()
for b in rs:
    if b.name == n:
                print b.name + n
                try:
                        conn.delete_bucket('n')
                        print "Bucket did not contian keys and was deleted!"
                except:

                        print "WARNING: Bucket Contains Keys!"
                        ans = raw_input("Do you want to continue? (y/n)")
                        mod_ans = str(ans.upper())
                        if mod_ans == 'Y':
                                        #print "got here"
                                full_bucket = conn.get_bucket(n)
                                print "[+] Deleting keys..."
                                for key in full_bucket.list():
                                        key.delete()
                                print "[+] Keys deleted, Deleting Bucket"
                                conn.delete_bucket(n)
                                print "[+] Bucket deleted"
                                exit(0)
                        elif mod_ans == 'N':
                                print "No bucket was deleted."
                                exit(0)
                        else:
                                print "Please answer 'y' or 'n'."
                                exit(0)

                        exit(0)
        else:
                print "That bucket does not exist!"
                exit(0)

似乎没有过去:

if b.name == n:

因为我在“else”语句中得到了自己的“错误”:

print "That bucket does not exist!"

我在不同的实例上尝试了代码,并仔细检查了文件中的信用卡(但是因为我可以列出存储桶,所以它似乎不是信用问题)。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

for b in rs:
    if b.name == n:
    ...
    else:
        print "That bucket does not exist!"
        exit(0)

这似乎假设帐户中只有一个存储桶。如果有多个存储桶,那么这个代码是否能够正常运行就可以了:可能首先会返回存储桶zapbucketx,也许它会赢。

看起来像你真正想要的是

else:
    continue

这样循环将继续通过桶列表,直到找到zapbucketx。

另外,这条线错了:

conn.delete_bucket('n')

您想要conn.delete_bucket(n)

您可能还希望在delete_bucket调用后退出,或者循环将继续到下一个存储桶名称,然后抱怨存储桶不存在。

此外,您在成功删除邮件中输入了拼写错误:" contian"