Something to be somewhat wary of, is the exact error type is not guaranteed and subject to change as the codebase changes and a more specific error type gets raised earlier in the logic.
There are a limited number of registered error type and they're often re-used (see boulder/probs/probs.go at main · letsencrypt/boulder · GitHub for a list of codes; note they can be raised under multiple circumstances ).
Different ACME servers may raise a different error type for the same situation; and few share the same detail.