more convenient exception handling