Glancing through this thread it sounds like maybe you don't ever want to throw an actual error. Why not just maintain an output that will reflect one of several expected outcomes? The workflow will always exit successfully and you'll get presented with some sort of outcome pass, fail, partial, unexpected etc and then you can take action based on that.
Paul