looping: don't rely on exception