use exceptions