UPDATE:重构代码，优化抛出异常处理