OSS Python SDK の例外 (`OssError`) は、`ClientError`、`RequestError`、`ServerError` の 3 つのカテゴリに分類されます。これらの例外は `oss2.exceptions` サブモジュールで定義されています。
次の表に、例外の変数と型を示します。
変数 | 型 | 説明 |
status | int |
|
request_id | str |
|
code and message | str | OSS エラー応答フォーマットの `Code` および `Message` XML タグのテキストです。 |
例外処理の例
次のコードは、存在しないファイルをダウンロードする際の例外を処理する方法を示しています。エラーメッセージから HTTP ステータスコードとリクエスト ID を出力します。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (例: cn-hangzhou) を設定します。 注意: このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# "examplebucket" を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
try:
# ダウンロードするファイルの名前 (例: exampleobject.txt) を設定します。
stream = bucket.get_object('exampleobject.txt')
except oss2.exceptions.NoSuchKey as e:
print('status={0}, request_id={1}'.format(e.status, e.request_id)) ClientError
`ClientError` は、無効なクライアント入力によって発生します。たとえば、`bucket.batch_delete_objects` メソッドに空のファイルリストを指定した場合に、この例外がスローされます。`ClientError` の `status` 値は `oss2.exceptions.OSS_CLIENT_ERROR_STATUS` です。
RequestError
HTTP ライブラリが例外をスローすると、Python SDK はそれを `RequestError` に変換します。`RequestError` の `status` 値は `oss2.exceptions.OSS_REQUEST_ERROR_STATUS` です。
ServerError
OSS サーバーが HTTP エラーコードを返すと、Python SDK はそれを `ServerError` に変換します。`ServerError` には、HTTP ステータスコードと OSS エラーコードから派生した複数の子クラスがあります。たとえば、`NotFound` 子クラスはすべての 404 例外に対応し、`Conflict` 子クラスはすべての 409 例外に対応します。
次の表に、一般的なエラーコードを示します。
例外クラス | HTTP ステータスコード | OSS エラーコード | 説明 |
NotModified | 304 | Empty | 条件付きダウンロードを使用する際、`If-Modified-Since` パラメーターで指定された時刻が、オブジェクトの実際の変更時刻より後である場合に発生します。 |
InvalidArgument | 400 | InvalidArgument | マルチパートアップロード中に `x-oss-complete-all:yes` も指定されている場合、本文を指定することはできません。指定した場合、エラーが発生します。 |
AccessDenied | 403 | AccessDenied | 必要なアクセス権限がありません。 |
NoSuchBucket | 404 | NoSuchBucket | バケットが存在しません。 |
NoSuchKey | 404 | NoSuchKey | ファイルが存在しません。 |
NoSuchUpload | 404 | NoSuchUpload | マルチパートアップロードまたは再開可能なアップロード中に、一部のパートは正常にアップロードされましたが、アップロードが完了していません。 |
NoSuchWebsite | 404 | NoSuchWebsiteConfiguration | バケットに静的 Web サイトホスティングが設定されていません。 |
NoSuchLifecycle | 404 | NoSuchLifecycle | バケットにライフサイクルルールが設定されていません。 |
NoSuchCors | 404 | NoSuchCORSConfiguration | バケットにオリジン間リソース共有 (CORS) が設定されていません。 |
BucketNotEmpty | 409 | BucketNotEmpty | 削除しようとしているバケットに、オブジェクト、未完了のマルチパートアップロードタスク、または削除されていない `LiveChannels` が含まれています。 |
PositionNotEqualToLength | 409 | PositionNotEqualToLength | `Position` の値が現在のオブジェクトの長さと一致しません。 |
ObjectNotAppendable | 409 | ObjectNotAppendable | 現在のファイルは追加可能オブジェクトではありません。 |