OSS Python SDK異常(OssError)分為三類:ClientError、RequestError和ServerError,這些異常定義在oss2.exceptions子模組中。
異常的成員變數如下:
變數 | 類型 | 描述 |
---|---|---|
status | int | - ServerError:HTTP狀態碼 - ClientError和RequestError:固定值 |
request_id | str | - ServerError:OSS伺服器返回的請求ID - ClientError和RequestError:Null 字元串 |
code和message | str | 對應OSS的錯誤響應格式裡的Code和Message兩個XML Tag中的文本。 |
異常處理樣本
下面的代碼展示了下載一個不存在檔案時的異常處理,並列印出錯誤資訊的HTTP狀態碼和請求ID。
# -*- coding: utf-8 -*-
import oss2
# 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州為例,其它Region請按實際情況填寫。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
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))
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 | 空 | 沒有修改 |
AccessDenied | 403 | AccessDenied | 拒絕訪問 |
NoSuchBucket | 404 | NoSuchBucket | 儲存空間不存在 |
NoSuchKey | 404 | NoSuchKey | 檔案不存在 |
NoSuchUpload | 404 | NoSuchUpload | 分區上傳不存在 |
NoSuchWebsite | 404 | NoSuchWebsiteConfiguration | 靜態網站託管未配置 |
NoSuchLifecycle | 404 | NoSuchLifecycle | 生命週期規則未配置 |
NoSuchCors | 404 | NoSuchCORSConfiguration | 跨域資源共用未配置 |
BucketNotEmpty | 409 | BucketNotEmpty | 儲存空間非空 |
PositionNotEqualToLength | 409 | PositionNotEqualToLength | 設定的追加位置和檔案長度不等 |
ObjectNotAppendable | 409 | ObjectNotAppendable | 不是可追加檔案 |