错误处理
使用异常而非返回码