全部產品
Search
文件中心

Object Storage Service:Python異常處理

更新時間:Oct 29, 2024

OSS Python SDK異常(OssError)分為三類:ClientError、RequestError和ServerError,這些異常定義在oss2.exceptions子模組中。

異常的變數、類型及描述如下表所示:

變數

類型0

描述

status

int

  • 如果為ServerError異常,則status為HTTP狀態代碼。

  • 如果為ClientError和RequestError異常,則status為固定值。

request_id

str

  • 如果為ServerError異常,則OSS伺服器返回請求ID。

  • 如果為ClientError和RequestError異常,則request_id返回的是Null 字元串。

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類型。