プロジェクトのランタイム中にエラーが発生した場合、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を出力します。
# -*- coding: utf-8 -*-
import oss2
auth = oss2.Auth ('Your AccessKeyID', 'Your AccessKeySecret')
bucket = oss2.Bucket (auth, 'Your endpoint', 'your bucket name')
try:
stream = bucket.get_object('random-key.txt')
except oss2.exceptions.NoSuchKey as e:
print('status={0}, request_id={1}'.format(e.status, e.request_id))