View a markdown version of this page

錯誤處理 - AWS SDK for Kotlin

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

錯誤處理

了解 AWS SDK for Kotlin 拋出例外狀況的方式和時間,對於使用 SDK 建置高品質應用程式至關重要。以下章節說明開發套件會擲回的不同例外狀況案例,以及如何正確處理這些狀況。

服務例外狀況

最常見的例外狀況是 AwsServiceException,所有服務特定的例外狀況 (例如 S3Exception) 都會從中繼承。此例外狀況代表來自 的錯誤回應 AWS 服務。例如,如果您嘗試終止不存在的 Amazon EC2 執行個體,Amazon EC2 會傳回錯誤回應。錯誤回應詳細資訊會包含在擲出AwsServiceException的 中。

當您遇到 時AwsServiceException,這表示您的請求已成功傳送到 , AWS 服務 但無法處理。這可能是因為請求參數中的錯誤,或因為服務端的問題。

用戶端例外狀況

ClientException 表示在嘗試傳送請求至 或嘗試剖析回應 AWS 時,用戶端程式碼內 AWS SDK for Kotlin 發生問題 AWS。ClientException 通常比 更嚴重,AwsServiceException表示主要問題是用戶端無法處理 的服務呼叫 AWS 服務。例如,ClientException如果 無法剖析來自服務的回應, 會 AWS SDK for Kotlin 擲回 。

錯誤中繼資料

每個服務例外狀況和用戶端例外狀況都有 sdkErrorMetadata 屬性。這是類型屬性包,可用於擷取有關錯誤的其他詳細資訊。

AwsErrorMetadata 類型直接有數個預先定義的擴充功能,包括但不限於下列項目:

  • sdkErrorMetadata.requestId – 唯一的請求 ID

  • sdkErrorMetadata.errorMessage – 人類可讀訊息 (通常與 相符Exception.message,但如果 服務的例外狀況不明,則可能包含更多資訊)

  • sdkErrorMetadata.protocolResponse – 原始通訊協定回應

下列範例示範如何存取錯誤中繼資料。

try { s3Client.listBuckets { ... } } catch (ex: S3Exception) { val awsRequestId = ex.sdkErrorMetadata.requestId val httpResp = ex.sdkErrorMetadata.protocolResponse as? HttpResponse println("requestId was: $awsRequestId") println("http status code was: ${httpResp?.status}") }