I've played around a little with the rewrite here, as there doesn't appear to be an actual bug in original. Looks like you're going for one (or possibly both) of two goals here:

1) Eliminate the try/catch overhead of the non-local return (which was unknown to me until I investigated).
2) Stylistically prefer condition flags to early returns.

I fully support the former and mildly disagree with the latter; I tend to believe early returns are easier to read than conditions. Unless I'm missing something, I'll commit this with a small rewrite that handles (1) but doesn't follow (2).