In case you need a tiebreaker, I also like the explicitness. (In a perfect world, I would have designed the exception class better so you could pull out of it afterward exactly what argument was the problem and whether it was missing or bad. Pretty-printing could be done within the class. For example, see any of the exceptions in https://github.com/erikrose/parsimonious/blob/master/parsimonious/exceptions.py.)