59 lines
2 KiB
Plaintext
59 lines
2 KiB
Plaintext
---
|
|
layout: docs
|
|
page_title: can - Functions - Configuration Language
|
|
description: |-
|
|
The can function tries to evaluate an expression given as an argument and
|
|
indicates whether the evaluation succeeded.
|
|
---
|
|
|
|
# `can` Function
|
|
|
|
`can` evaluates the given expression and returns a boolean value indicating
|
|
whether the expression produced a result without any errors.
|
|
|
|
This is a special function that is able to catch errors produced when evaluating
|
|
its argument. For most situations where you could use `can` it's better to use
|
|
[`try`](/docs/job-specification/hcl2/functions/conversion/try) instead, because it allows for more concise definition of
|
|
fallback values for failing expressions.
|
|
|
|
The `can` function can only catch and handle _dynamic_ errors resulting from
|
|
access to data that isn't known until runtime. It will not catch errors
|
|
relating to expressions that can be proven to be invalid for any input, such
|
|
as a malformed reference.
|
|
|
|
~> **Warning:** The `can` function is intended only for simple tests in
|
|
variable validation rules. Although it can technically accept any sort of
|
|
expression and be used elsewhere in the configuration, we recommend against
|
|
using it in other contexts. For error handling elsewhere in the configuration,
|
|
prefer to use [`try`](/docs/job-specification/hcl2/functions/conversion/try).
|
|
|
|
## Examples
|
|
|
|
```shell-session
|
|
> local.foo
|
|
{
|
|
"bar" = "baz"
|
|
}
|
|
> can(local.foo.bar)
|
|
true
|
|
> can(local.foo.boop)
|
|
false
|
|
```
|
|
|
|
The `can` function will _not_ catch errors relating to constructs that are
|
|
provably invalid even before dynamic expression evaluation, such as a malformed
|
|
reference or a reference to a top-level object that has not been declared:
|
|
|
|
```shell-session
|
|
> can(local.nonexist)
|
|
|
|
Error: Reference to undeclared local value
|
|
|
|
A local value with the name "nonexist" has not been declared.
|
|
```
|
|
|
|
## Related Functions
|
|
|
|
- [`try`](/docs/job-specification/hcl2/functions/conversion/try), which tries evaluating a sequence of expressions and
|
|
returns the result of the first one that succeeds.
|