This is definitely not the right way to handle this. I think maybe we should split `_handle_error` into a seperate `_consume_errors` function which pulls stuff off the stack?