# onExceptionHandle 异常的回调 如果在控制器方法执行过程中抛出了异常,那么会直接跳转到onExceptionHandle方法。 默认我们提供了一个异常处理。 ```php /** * 异常的回调 * @param \Exception $e */ public function onExceptionHandle(\Exception $e) { switch ($this->request_type) { case SwooleMarco::HTTP_REQUEST: $this->http_output->end($e->getMessage()); break; case SwooleMarco::TCP_REQUEST: $this->send($e->getMessage()); break; } } ``` 如果需要修改请继承Controller。 实际上我们建议在你开始编写代码之前将Controller,Model, 等常用的类都继承一遍,变成自己业务的基类。这样才能保证框架更新的时候不会出现代码冲突问题。 由于协程的存在,异常嵌套处理比较麻烦,下面将其情况一一说明。 1.普通的controller异常测试,onExceptionHandle将接收到回调 ```php /** * 普通的controller异常测试 * @throws \Exception */ public function http_testExceptionHandleII() { throw new \Exception('ExceptionHandle'); } ``` 2.普通model内的异常测试,onExceptionHandle将接收到回调 ```php /** * 普通model的异常测试 * @throws \Exception */ public function http_testExceptionHandleIII() { $this->testModel = $this->loader->model('TestModel', $this); $result = $this->testModel->test_exception(); } ``` 3.协程的model内的异常测试,onExceptionHandle将接收到回调 ```php /** * 协程的model报错需要增加try catch捕获,否则无法抛出 */ public function http_testExceptionHandleIV() { $this->testModel = $this->loader->model('TestModel', $this); $result = yield $this->testModel->test_exceptionII(); } ``` 4.总结:无论协程或者是多层协程嵌套,还是普通的代码,或者普通代码混合协程,都可以一路向上throw。并且可以通过try catch捕获。和正常代码没有任何区别。