Two error-reporting conventions for a command-parser
Given the additional context, I don't think exceptions are warranted here.

Exceptions are most useful when the code that generates an error condition is far away from the code that handles that error condition.

In this code, the error condition is handled immediately after it's generated.

So I'd prefer the bool-returning version rather than throw/catch.