全部產品
Search
文件中心

Object Storage Service:出錯處理

更新時間:Oct 19, 2018

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。

  1. # -*- coding: utf-8 -*-
  2. import oss2
  3. # 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  4. auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
  5. # Endpoint以杭州為例,其它Region請按實際情況填寫。
  6. bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
  7. try:
  8. stream = bucket.get_object('random-key.txt')
  9. except oss2.exceptions.NoSuchKey as e:
  10. 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 不是可追加檔案