OSS Python SDK異常(OssError)分為三類:ClientError、RequestError和ServerError,這些異常定義在oss2.exceptions子模塊中。
異常的變量、類型及描述如下表所示:
變量 | 類型0 | 描述 |
status | int |
|
request_id | str |
|
code和message | str | 對應OSS的錯誤響應格式里的Code和Message兩個XML Tag中的文本。 |
異常處理示例
以下代碼展示了下載一個不存在文件時的異常處理,并打印出錯誤信息的HTTP狀態碼和請求ID。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填寫Endpoint對應的Region信息,例如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 | 空 | 使用條件下載時,通過If-Modified-Since參數指定的時間晚于Object實際修改時間。 |
InvalidArgument | 400 | InvalidArgument | 分片上傳時如果指定了x-oss-complete-all:yes,則不允許繼續指定body,否則報錯。 |
AccessDenied | 403 | AccessDenied | 沒有相應的訪問權限。 |
NoSuchBucket | 404 | NoSuchBucket | Bucket不存在。 |
NoSuchKey | 404 | NoSuchKey | 文件不存在。 |
NoSuchUpload | 404 | NoSuchUpload | 分片上傳或者斷點續傳時,部分分片上傳成功,但最終未完成上傳。 |
NoSuchWebsite | 404 | NoSuchWebsiteConfiguration | Bucket未配置靜態網站托管。 |
NoSuchLifecycle | 404 | NoSuchLifecycle | Bucket未配置生命周期規則。 |
NoSuchCors | 404 | NoSuchCORSConfiguration | Bucket未配置跨域資源共享。 |
BucketNotEmpty | 409 | BucketNotEmpty | 要刪除的Bucket中存在未刪除的Object、未完成的分片上傳任務或Livechannel。 |
PositionNotEqualToLength | 409 | PositionNotEqualToLength | Position的值和當前Object的長度不一致。 |
ObjectNotAppendable | 409 | ObjectNotAppendable | 當前文件不是Appendable類型。 |