boto.storage_uri()
可能性のある例外を処理できるように、Python で呼び出しをラップするにはどうすればよいですか?
3 に答える
Boto についてのあなたの質問は良い質問ですが、答えるのは簡単ではありません。Boto 例外階層の設計は不十分であり、最終的にトラップする例外が何であるかを判断する唯一の方法は、boto ソース コードを確認することです。
たとえば、(Ubuntu で) /usr/share/pyshared/boto/exception.py を見ると、2 つの広範なクラスがあることがわかります: boto.exception.BotoClientError boto.exception.BotoServerError
例外の多くはこれら 2 つから派生していますが、"クライアント" と "サーバー" の概念はあまり明確に定義されておらず、多くの例外が予期せず (いつものように) 発生する可能性があるため、両方を確認することをお勧めします。ただし、boto.exception.NoAuthHandlerFound などの例外はException から直接派生するため、個別に確認する必要があります。
残念ながら、コードを見ると、Boto で例外階層を定義する際に一貫性も注意もあまりないように見えます。これは Boto の設計上の欠陥であり、残念ながら、通常推奨されるよりも広範な例外チェックに依存する必要があります。
最初の質問は、この呼び出しでどのような例外が発生する可能性があるかということです。どの言語でも包括的な例外ハンドラーを作成する必要はありません。最初にBotoのドキュメントを調べて、特定の呼び出しで発生する可能性のある例外がドキュメント化されているかどうかを確認する必要がありますが、そうでない場合は、最初に次のことを試みます。
try:
uri = boto.storage_uri()
except Exception, e:
print e
または、(logging packageexception
メソッドを使用して)例外をログに記録しますが、どちらの方法でも、テスト中に表示される例外のタイプと、それらのいずれかを特別に処理する必要があるかどうかに注意する必要があります。また、例外とエラーに関するPythonチュートリアルのセクションを確認することもできます。