1

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 コードにバグがありますか? また、すべてのエラーをキャッチしようとしましたが、サイコロはまだありません。

4

1 に答える 1

3
b = s3.buckets[bucket_name]

実際にはリクエストを作成せず、 のような例外を通過することもありませんNoSuchBucket

その名前が何であるかを知っているバケットオブジェクトを返すだけです。リクエストが発生するのは、バケットに対して実際に何かを実行しようとした場合 (バケットの内容を一覧表示する、ファイルを追加する場合)、この時点でNoSuchBucket発生します。これはbeginブロックの外側にあるため、rescue処理しません。その例外をレスキューする必要がある場合は、バケットを実際に使用する場所の周りに開始/レスキューを配置する必要があります。

実際に存在することを検証しようとしているだけの場合は、次のようなことができます

s3.buckets[bucket_name].exists?
于 2012-07-05T20:46:18.290 に答える