Print gen errors instead of discarding

Previously if `run()` returned an error, it was discarded by returning immediately instead of being printed out. This fixes it by deferring the error printing so errors are still printed when returning prematurely.

Another way of fixing this would be to put the switch in an else of the `len(args) == 1` if statement and removing the early return. Let me know if that's what you'd prefer and I'll amend the pull request.