

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

# 失敗的工作流程狀態
<a name="state-fail"></a>

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

`Fail` 狀態 (`"Type": "Fail"`) 會停止執行狀態機器，並將其標示為失敗，除非被`Catch`區塊攔截。

`Fail` 狀態僅允許使用來自一組常見狀態`Comment`欄位的 `Type`和 欄位。 [工作流程中的常見狀態欄位](statemachine-structure.md#amazon-states-language-common-fields)此外，`Fail` 狀態允許使用下列欄位。

** `Cause` (選用)**  
描述錯誤原因的自訂字串。您可以指定此欄位用於操作或診斷目的。  
在 JSONata 狀態下，您也可以指定 JSONata 表達式。

** `CausePath` （選用，僅限 JSONPath) **  
如果您想要使用[參考路徑](amazon-states-language-paths.md#amazon-states-language-reference-paths)，從狀態輸入動態提供錯誤原因的詳細說明，請使用 `CausePath`。解決後，參考路徑必須選取包含字串值的欄位。  
您也可以`CausePath`使用傳回字串[的內部 函數](intrinsic-functions.md)來指定 。這些內部是： [States.Format](intrinsic-functions.md#asl-intrsc-func-generic)、[States.JsonToString](intrinsic-functions.md#jsontostring)、[States.ArrayGetItem](intrinsic-functions.md#arraygetitem)[States.Base64Encode](intrinsic-functions.md#base64encode)、[States.Base64Decode](intrinsic-functions.md#base64decode)、 [States.Hash](intrinsic-functions.md#asl-intrsc-func-uuid-generate) 和 [States.UUID](intrinsic-functions.md#statesuuid)。  
+ 您可以在失敗狀態定義中指定 `Cause`或 `CausePath`，但不能同時指定兩者。
+ 作為資訊安全最佳實務，我們建議您從原因描述中移除任何敏感資訊或內部系統詳細資訊。

** `Error` (選用)**  
您可以使用[重試](concepts-error-handling.md#error-handling-retrying-after-an-error)或[擷取](concepts-error-handling.md#error-handling-fallback-states)欄位提供錯誤名稱來執行錯誤處理。您也可以提供用於操作或診斷目的的錯誤名稱。  
在 JSONata 狀態下，您也可以指定 JSONata 表達式。

** `ErrorPath` （選用，僅限 JSONPath) **  
如果您想要使用[參考路徑](amazon-states-language-paths.md#amazon-states-language-reference-paths)從狀態輸入動態提供錯誤的名稱，請使用 `ErrorPath`。解決後，參考路徑必須選取包含字串值的欄位。  
您也可以`ErrorPath`使用傳回字串[的內部 函數](intrinsic-functions.md)來指定 。這些內部是： [States.Format](intrinsic-functions.md#asl-intrsc-func-generic)、、[States.JsonToString](intrinsic-functions.md#jsontostring)[States.ArrayGetItem](intrinsic-functions.md#arraygetitem)[States.Base64Encode](intrinsic-functions.md#base64encode)、[States.Base64Decode](intrinsic-functions.md#base64decode)、 [States.Hash](intrinsic-functions.md#asl-intrsc-func-uuid-generate) 和 [States.UUID](intrinsic-functions.md#statesuuid)。  
+ 您可以在失敗狀態定義中指定 `Error`或 `ErrorPath`，但不能同時指定兩者。
+ 作為資訊安全最佳實務，我們建議您從錯誤名稱中移除任何敏感資訊或內部系統詳細資訊。

由於 `Fail` 狀態一律會結束狀態機器，因此沒有 `Next` 欄位，也不需要 `End` 欄位。

## 失敗狀態定義範例
<a name="fail-state-examples"></a>

下列失敗狀態定義範例會指定靜態`Error`和`Cause`欄位值。

```
"FailState": {
  "Type": "Fail",
  "Cause": "Invalid response.",
  "Error": "ErrorA"
}
```

下列失敗狀態定義範例會動態使用參考路徑來解析 `Error`和 `Cause` 欄位值。

```
"FailState": {
  "Type": "Fail",
  "CausePath": "$.Cause",
  "ErrorPath": "$.Error"
}
```

下列失敗狀態定義範例使用 [States.Format](intrinsic-functions.md#asl-intrsc-func-generic) 內部函數動態指定 `Error`和 `Cause` 欄位值。

```
"FailState": {
  "Type": "Fail",
  "CausePath": "States.Format('This is a custom error message for {}, caused by {}.', $.Error, $.Cause)",
  "ErrorPath": "States.Format('{}', $.Error)"
}
```