Errors for Workflows might be raised, for example, by failed HTTP requests, functions, connectors, or generated by your own workflow code.
- You can raise custom errors
using the
raise
syntax. - You can catch errors using
a
try/except
block. - You can retry steps that return a specific error code and define the maximum number of retry attempts.
Error maps
When a workflow throws an error during execution that isn't caught, the execution fails, and an error map (a JSON dictionary) describing the error is returned.
Errors thrown during workflow execution contain tags to help you identify what
caused the error. For example, the error returned from a connector can have two
keys (tags
and message
) similar to the following:
{'tags': ['SystemError'], 'message': 'an error has occurred'}
There can be more than one tag. To check for a specific tag, you can use an expression. For example:
${'SystemError' in e.tags}
Access error data returned as a string
Some connectors and HTTP APIs will serialize errors as strings before returning
the errors. You can use standard library functions to restore a payload to the
original error. For example, to convert an error string to a map, you can use
the json.decode
and text.encode
functions:
json.decode(text.encode(ERROR_FROM_API))
Error tags
The following table describes the meaning of different error tags.
Tag | Description |
---|---|
AuthError | Raised when generating credentials for an HTTP request fails. |
ConnectionError | Raised when a connection is successfully established with the endpoint but there is a problem with the connection during data transfer. The connection is terminated before a full response is received and a message might not have been delivered to the endpoint. Retries might not be idempotent. |
ConnectionFailedError | Raised when a connection is not established with the API endpoint; for example, due to an incorrect domain name, DNS resolution issues, or other network problems. Retries are idempotent. |
HttpError | Raised when an
HTTP request fails
with an HTTP error status. When this exception is raised, the
response is a map with the following elements:
|
IndexError | Raised when a sequence subscript is an out of range integer. |
KeyError | Raised when a map key is not found in the set of existing keys. |
OperationError | Raised when a long-running operation finishes unsuccessfully. |
ParallelNestingError | Raised when the maximum depth that parallel steps can be nested is exceeded. |
RecursionError | Raised when the interpreter detects that the maximum call stack depth is exceeded. |
ResourceLimitError | Raised when some resource limit is exhausted. When raised internally, this type of error cannot be caught and causes immediate execution failure. |
ResponseTypeError | Raised when a long-running operation returns a response of the wrong type. |
SystemError | Raised when the interpreter finds an internal error. |
TimeoutError | Raised when a system function times out at the system level. |
TypeError | Raised when an operation or function is applied to an object of incompatible type. The associated value is a string giving details about the type mismatch. |
UnhandledBranchError | Raised when one or more branches or iterations encounters an unhandled runtime error up to a maximum number. |
ValueError | Raised when an operation or function receives an argument that has the
correct type but an incorrect value, and the situation is not described
by a more precise exception, such as an IndexError . |
ZeroDivisionError | Raised when the second argument of a division or modulo operation is zero. The associated value is a string indicating the type of the operands and the operation. |