Exception OSS Python SDK (OssError) terbagi menjadi tiga kategori: ClientError, RequestError, dan ServerError. Exception ini didefinisikan dalam submodul oss2.exceptions.
Tabel berikut menjelaskan variabel dan tipe data untuk exception tersebut.
Variable | Type | Description |
status | int |
|
request_id | str |
|
code and message | str | Teks dari tag XML `Code` dan `Message` dalam format tanggapan error OSS. |
Contoh penanganan exception
Kode berikut menunjukkan cara menangani exception saat mengunduh file yang tidak ada, dengan mencetak kode status HTTP dan request ID dari pesan error.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tetapkan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tetapkan wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk signature V4.
region = "cn-hangzhou"
# Ganti examplebucket dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
try:
# Tetapkan nama file yang akan diunduh, misalnya 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 terjadi akibat input klien yang tidak valid. Misalnya, exception ini dilemparkan jika Anda memberikan daftar file kosong ke metode `bucket.batch_delete_objects`. Nilai `status` untuk ClientError adalah `oss2.exceptions.OSS_CLIENT_ERROR_STATUS`.
RequestError
Ketika library HTTP melemparkan exception, Python SDK mengonversinya menjadi RequestError. Nilai `status` untuk RequestError adalah `oss2.exceptions.OSS_REQUEST_ERROR_STATUS`.
ServerError
Ketika server OSS mengembalikan kode error HTTP, Python SDK mengonversinya menjadi ServerError. ServerError memiliki beberapa kelas turunan yang diturunkan dari kode status HTTP dan kode error OSS. Sebagai contoh, kelas turunan NotFound mencakup semua exception 404, sedangkan kelas turunan Conflict mencakup semua exception 409.
Tabel berikut mencantumkan kode error umum.
Exception class | HTTP status code | OSS error code | Description |
NotModified | 304 | Empty | Saat menggunakan unduhan bersyarat, waktu yang ditentukan oleh parameter `If-Modified-Since` lebih baru daripada waktu modifikasi aktual objek. |
InvalidArgument | 400 | InvalidArgument | Saat melakukan unggah multi-bagian, Anda tidak dapat menentukan body jika `x-oss-complete-all:yes` juga ditentukan. Jika Anda melakukannya, terjadi error. |
AccessDenied | 403 | AccessDenied | Anda tidak memiliki izin akses yang diperlukan. |
NoSuchBucket | 404 | NoSuchBucket | Bucket tidak ada. |
NoSuchKey | 404 | NoSuchKey | File tidak ada. |
NoSuchUpload | 404 | NoSuchUpload | Saat melakukan unggah multi-bagian atau unggah yang dapat dilanjutkan, beberapa bagian berhasil diunggah, tetapi proses unggah belum selesai. |
NoSuchWebsite | 404 | NoSuchWebsiteConfiguration | Hosting website statis belum dikonfigurasi untuk bucket tersebut. |
NoSuchLifecycle | 404 | NoSuchLifecycle | Tidak ada aturan siklus hidup yang dikonfigurasi untuk bucket tersebut. |
NoSuchCors | 404 | NoSuchCORSConfiguration | Berbagi sumber daya lintas origin (CORS) belum dikonfigurasi untuk bucket tersebut. |
BucketNotEmpty | 409 | BucketNotEmpty | Bucket yang ingin Anda hapus berisi objek, tugas unggah multi-bagian yang belum lengkap, atau LiveChannels yang belum dihapus. |
PositionNotEqualToLength | 409 | PositionNotEqualToLength | Nilai `Position` tidak sesuai dengan panjang objek saat ini. |
ObjectNotAppendable | 409 | ObjectNotAppendable | File saat ini bukan objek Appendable. |