【问题标题】:AWS S3 NoSuchBucket Exception Not Caught in Rescue Clause救援条款中未捕获 AWS S3 NoSuchBucket 异常
【发布时间】:2012-07-06 04:46:18
【问题描述】:

我正在尝试使用 AWS 开发工具包在 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 代码中的错误实际上并未引发错误?我也尝试过捕捉所有错误,但仍然没有骰子。

【问题讨论】:

    标签: ruby amazon-s3 amazon-web-services


    【解决方案1】:
    b = s3.buckets[bucket_name]
    

    实际上不会发出任何请求,也不会出现NoSuchBucket 之类的异常。

    它只是返回一个知道其名称的存储桶对象。仅当您实际尝试对存储桶执行某些操作(列出其内容,向其中添加文件)时才会发生请求,并且此时会引发 NoSuchBucket。这在您的 begin 块之外,因此您的 rescue 无法处理它。如果您需要抢救该异常,则需要将开始/救援放在您实际使用存储桶的地方。

    如果你只是想验证它确实存在,你可以做类似的事情

    s3.buckets[bucket_name].exists?
    

    【讨论】:

    • 请注意,.exists? 不起作用。使用[] 抓取存储桶或使用[] 从存储桶中获取对象都不会引发错误,仅尝试写入对象会。感谢您确认实际引发错误的位置。
    猜你喜欢
    • 2012-05-08
    • 2021-10-24
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多