

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Fail 工作流程状态
<a name="state-fail"></a>

**管理状态和转换数据**  
了解如何[使用变量在状态之间传递数据](workflow-variables.md)和[使用 JSONata 转换数据](transforming-data.md)。

`Fail` 状态 (`"Type": "Fail"`) 将停止状态机的执行并将其标记为故障，除非被 `Catch` 块捕获。。

`Fail` 状态仅允许使用[常用状态字段](statemachine-structure.md#amazon-states-language-common-fields)集合中的 `Type` 和 `Comment` 字段。此外，`Fail` 状态允许以下字段。

** `Cause`（可选）**  
描述错误原因的自定义字符串。您可以指定此字段用于操作或诊断目的。  
在 JSONata 状态下，您还可以指定一个 JSONata 表达式。

** `CausePath`（可选，仅限 JSONPath） **  
如果要使用[参考路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)从状态输入中动态提供有关错误原因的详细描述，请使用 `CausePath`。解决后，参考路径必须选择包含字符串值的字段。  
您也可以使用返回字符串的[内置函数](intrinsic-functions.md)来指定 `CausePath`。这些内置函数包括：[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).  
+ 您可以在 Fail 状态定义中指定 `Cause` 或 `CausePath`，但二者不能同时指定。
+ 作为信息安全最佳实操，我们建议您从原因描述中删除任何敏感信息或内部系统详细信息。

** `Error`（可选）**  
使用 [Retry](concepts-error-handling.md#error-handling-retrying-after-an-error) 或 [Catch](concepts-error-handling.md#error-handling-fallback-states) 字段执行错误处理时可以提供的错误名称。您也可以提供错误名称用于操作或诊断目的。  
在 JSONata 状态下，您还可以指定一个 JSONata 表达式。

** `ErrorPath`（可选，仅限 JSONPath） **  
如果要使用[参考路径](amazon-states-language-paths.md#amazon-states-language-reference-paths)从状态输入中动态提供错误的名称，请使用 `ErrorPath`。解决后，参考路径必须选择包含字符串值的字段。  
您也可以使用返回字符串的[内置函数](intrinsic-functions.md)来指定 `ErrorPath`。这些内置函数包括：[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).  
+ 您可以在 Fail 状态定义中指定 `Error` 或 `ErrorPath`，但二者不能同时指定。
+ 作为信息安全最佳实操，我们建议您从错误名称中删除任何敏感信息或内部系统详细信息。

由于 `Fail` 状态始终会退出状态机，它们没有 `Next` 字段，也不需要 `End` 字段。

## Fail 状态定义示例
<a name="fail-state-examples"></a>

以下 Fail 状态定义示例指定了静态 `Error` 和 `Cause` 字段值。

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

以下 Fail 状态定义示例使用参考路径动态解析 `Error` 和 `Cause` 字段值。

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

以下 Fail 状态定义示例使用 [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)"
}
```