edit-icon download-icon

エラー処理

最終更新日: Oct 25, 2017

プロジェクトのランタイム中にエラーが発生した場合、Python SDKはそれに応じて例外をスローします。

ClientError、RequestError、ServerErrorの3種類の例外があります。これらはすべてOssErrorのサブクラスであり、oss2.exceptionsサブモジュールで定義されています。

OssErrorには、次の重要なメンバー変数があります。

  • status: int型。 ServerErrorのHTTPステータスコードまたは他の2つのタイプのエラーの固定値です。

  • request_id: str型。 ServerErrorのためにOSSサーバーによって返されたリクエストID、または他の2つのタイプのエラーのためのnull文字列です。

  • code と message: str 型。 OSS のエラー応答のCode と Messageの2つのXMLタグのテキストです。

ClientError

ClientErrorは、クライアント側の入力エラーが原因です。たとえば、Bucket.batch_delete_objectsの間に空のオブジェクト名リストが受け取られると、ClientErrorがスローされます。 ClientErrorオブジェクトのステータス値は、oss2.exceptions.OSS_CLIENT_ERROR_STATUSに固定されています。

RequestError

基になるHTTPライブラリによってエラーがスローされると、Python SDKはそのエラーをRequestErrorに変換します。そのようなエラーの状態値は、oss2.exceptions.OSS_REQUEST_ERROR_STATUSに固定されています。

ServerError

OSSサーバーがHTTPエラーコード4xxまたは5xxを返すと、Python SDKはOSSサーバーの応答をServerErrorに変換します。

以下のサブクラスは、Python SDKの使い方を簡単にするためのステータスとコードから派生しています。

異常クラス 対応する HTTP ステータスコード OSS エラーコード メモ
NotModified 304 Null 変更されていません
AccessDenied 403 AccessDenied アクセスが拒否されました
NoSuchBucket 404 NoSuchBucket バケットは存在しません
NoSuchKey 404 NoSuchKey ファイル名が存在しません
NoSuchUpload 404 NoSuchUpload マルチパートアップロードは存在しません
NoSuchWebsite 404 NoSuchWebsiteConfiguration 静的なウェブサイトホスティングは設定されていません
NoSuchLifecycle 404 NoSuchLifecycle ライフサイクル管理が構成されていません
NoSuchCors 404 NoSuchCORSConfiguration CORS は設定されていません
BucketNotEmpty 409 BucketNotEmpty バケットは空ではりません
PositionNotEqualToLength 409 PositionNotEqualToLength 追加位置がオブジェクトの長さと等 しくない
ObjectNotAppendable 409 ObjectNotAppendable オブジェクトは追加可能ではありません

さらに、 404 ステータスコードのすべてのエラーは NotFoundのサブクラスであり, 409 ステータスコードのすべてのエラーはConflictのサブクラスです。

注意: すべてのOSSエラーコードが対応するエラーを持っているわけではありません。現在、一般的なエラーのみが定義されています。

次のコードは、オブジェクトのダウンロード中にオブジェクト名が存在しない場合の異常を処理し、HTTPステータスコードとリクエストIDを出力します。

  1. # -*- coding: utf-8 -*-
  2. import oss2
  3. auth = oss2.Auth ('Your AccessKeyID', 'Your AccessKeySecret')
  4. bucket = oss2.Bucket (auth, 'Your endpoint', 'your bucket name')
  5. try:
  6. stream = bucket.get_object('random-key.txt')
  7. except oss2.exceptions.NoSuchKey as e:
  8. print('status={0}, request_id={1}'.format(e.status, e.request_id))