我正在尝试使用AWS SDK在Ruby中获取一个存储桶,并尝试捕获NoSuchBucket错误。问题是,我的救援块没有捕获错误,所以我的应用程序崩溃了。以下是相关代码:
begin
b = s3.buckets[bucket_name]
rescue AWS::S3::Errors::NoSuchBucket
puts Invalid bucket name.
exit 1
end
,错误信息为:
C:/Ruby193/lib/ruby/gems/1.9.1/gems/aws-sdk-1.5.6/lib/aws/core/client.rb:277:in
`return_or_raise': The specified bucket does not exist (AWS::S3::Errors::NoSuchBucket)
我只是犯了一个愚蠢的初学者语法错误,或者AWS代码中是否存在实际上没有丢失错误的错误?我也试过捕捉所有的错误,但仍然没有骰子。
答案 0 :(得分:3)
b = s3.buckets[bucket_name]
实际上不会发出任何请求,也不会通过NoSuchBucket
等异常。
它只返回一个知道其名称的存储桶对象。只有在您实际尝试对存储桶执行某些操作(列出其内容,向其添加文件)时才会发生请求,此时此时会引发NoSuchBucket
。这超出了begin
阻止范围,因此您的rescue
无法处理它。如果你需要拯救那个例外,你需要将你的开始/救援放在实际使用该桶的地方。
如果您只是想验证它确实存在,您可以执行类似
的操作s3.buckets[bucket_name].exists?