Laravel例外没有抓住

时间:2017-11-17 15:27:56

标签: php laravel

我试图做一个非常基本的异常尝试捕获,但它没有捕获。

 $id =0;
 try {
        $question = $this->model->find($id);  // will not find anything since $id = 0
        $question->delete(); // throw an exception
        return true;
 } catch (\Exception $e) {
        dd ('hello');  // should end up here, but no?!?!? 
 } catch (FatalThrowableError $f) {
        echo ("fatal"); // or here... but no. 
 }

但是捕获并没有捕获"。我在浏览器中收到一个致命错误,说明在null对象上调用了delete。但这正是我试图做的事情:对空对象执行删除(id = 0不在DB中),以测试异常。

我试过了

use Symfony\Component\Debug\Exception;
use Symfony\Component\Debug\Exception\FatalThrowableError;

或只是

Exception;
FatalThrowableError;

此外,拥有\ Exception $ e或Exception $ e(有或没有)并没有改变任何东西。

请注意,如果我添加一行如$ foo = 4/0,我会进入Exception部分(dd(hello))。

in .env APP_DEBUG = true,APP_LOG_LEVEL = debug

我在Windows 7上使用PHP 7.0.10在Laravel 5.5上。

1 个答案:

答案 0 :(得分:3)

http://php.net/manual/en/language.errors.php7.php

  

由于Error层次结构不从Exception继承,因此使用的代码   catch (Exception $e) { ... }阻止处理未捕获的异常   PHP 5将发现这些块不会捕获这些Errors。   catch (Error $e) { ... }块或set_exception_handler()   处理程序是必需的。

您还可以catch (\Throwable $e) {}同时考虑ErrorException类型。