Python 是否可以检查bucket名称是否已经存在?

Python 是否可以检查bucket名称是否已经存在?,python,amazon-web-services,amazon-s3,boto,Python,Amazon Web Services,Amazon S3,Boto,我有一个方法需要一个名称来创建一个新的bucket 如果bucket名称已经存在,我想显示一条消息“bucket name ready existing” 是否可以检查bucket名称是否已经存在 def createBucket(bucketName): c = boto.s3.connect_to_region("us-east-1") # if bucketName exist: print "bucket name already exist"

我有一个方法需要一个名称来创建一个新的bucket

如果bucket名称已经存在,我想显示一条消息“bucket name ready existing”

是否可以检查bucket名称是否已经存在

def createBucket(bucketName):
    c = boto.s3.connect_to_region("us-east-1")
    # if bucketName exist: 
        print "bucket name already exist"
    else:
        bucket = c.create_bucket(bucketName)

bucket = createBucket(raw_input("Bucket name: "))   

当每个位置的bucket名称已被获取时,Amazon Web服务将为您提供一个自定义的
S3CreateError
异常

>>> bucket = conn.create_bucket('mybucket')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "boto/connection.py", line 285, in create_bucket
    raise S3CreateError(response.status, response.reason)
boto.exception.S3CreateError: S3Error[409]: Conflict

应该可以工作(尽管我现在不能尝试)。

假设boto.cfg配置为区域、安全、访问等

from boto.s3.connection import S3Connection
conn = S3Connection()
if conn.lookup('bucketnamehere') is not None:
     print('bucket already exists')
如果您的boto不支持conn.lookup,您可能希望使用head而不是get(请参阅:)


我有同样的问题,但a)使用
bot3
和b)我关心“任何人的帐户中都不存在”和“我只是没有访问权限”之间的区别。这就是我发现似乎有效的方法:

import boto3
list(s3.Bucket("private").objects.all())
# Thank you whoever created that bucket! 
# -> throws "An error occurred (AccessDenied)..."

list(s3.Bucket(some_name_that_does_not_exists).objects.all())
# -> throws "An error occurred (NoSuchBucket)..."

谢谢你的回答。但它显示的是:NameError:全局名称“S3CreateError”未定义抱歉,我忘了添加导入语句。我已经更新了代码。是的-它应该-我发布了一个例子。
try:
    conn.head_bucket('bucketnamehere')

except S3ResponseError as error:
    print('bucket already exists: {0}'.format(error))
import boto3
list(s3.Bucket("private").objects.all())
# Thank you whoever created that bucket! 
# -> throws "An error occurred (AccessDenied)..."

list(s3.Bucket(some_name_that_does_not_exists).objects.all())
# -> throws "An error occurred (NoSuchBucket)..."