Hi @wenslayer,
try is indeed a more general form of lookup. If we didn’t already have the lookup function then I expect we wouldn’t add it now, since try has subsumed all of the use-cases for it. It exists in modern Terraform largely for backward compatibility with older modules.
I personally now always use try and never use lookup in new code. Honestly that is mostly a subjective decision on my part: I think try looks more readable because its first argument is an expression written in the normal way and so it’s easier to see what’s going on. It can also concisely test multiple levels of traversal all at once: try(foo.bar.baz, "other").
The docs do warn against overusing try with really complex expressions where there are many possible reasons for failure, but as a direct replacement for lookup it’s just fine and is what try was originally designed for.