

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

# 錯誤處理
<a name="error-handling"></a>

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

## 服務例外狀況
<a name="service-exceptions"></a>

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

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

## 用戶端例外狀況
<a name="client-exceptions"></a>

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

## 錯誤中繼資料
<a name="error-metadata"></a>

每個服務例外狀況和用戶端例外狀況都有 `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}")
}
```