try {
maybeError := FunctionThrowingValueError()
} catch (ValueError e) {
// do stuff
}
I get at the end of the day it's all semantics, but personally I kinda like the error-specific syntax. If you want to do the normal return path, that's fine, but I prefer the semantics of Rust's Result type (EITHER a result OR an error may be set).To each their own, it's not something I really worry about.