阿里雲團隊努力不懈,力求將最新的技術內容更快地以您最熟悉的語言呈現。本文由簡體中文內容自動轉碼而成,過程無人工干預。阿里雲不保證此自動轉碼的準確性、完整性及時效性。因轉碼造成的任何內容錯誤及因此可能帶來的損失,阿里雲概不負責,敬請見諒。本文内容請以簡體中文版本為準。
全部產品
Search
文件中心

出錯處理

更新時間: 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 不是可追加檔案