无法捕捉laravel中的异常

Sex*_*yMF 10 php try-catch laravel php-7.1 laravel-5.4

我有以下情况:

  try {

        DB::beginTransaction();

        $task = new Task();
        $task->setTracker("");
        //thrown \Symfony\Component\Debug\Exception\FatalThrowableError


            DB::commit();

        }catch (\Exception $e){
            DB::rollBack();
            Log::error($e);
            //throw $e;
        }
Run Code Online (Sandbox Code Playgroud)

我没有进入捕捞区.
知道为什么吗?

更新

这是抛出的错误:

[Symfony\Component\Debug\Exception\FatalThrowableError]
Type error: Argument 1 passed to App\Models\Task::setTracker() must be an instance of Carbon\Carbon, integer given, called in /var/www/app/Services/ShareLogic.php on line 60

并且不会被抓住

谢谢

Sex*_*yMF 15

捕捉Throwable成功了.
不明白为什么?有人吗?


Sae*_*rez 6

它不会捕获异常,因为您试图捕获\ExceptionSymfony\Component\Debug\Exception\FatalThrowableError扩展的异常。

相反,尝试通过导入来捕获实际的异常。

use Symfony\Component\Debug\Exception\FatalThrowableError;
Run Code Online (Sandbox Code Playgroud)

然后你就可以做..

try {
    // 
} catch(FatalThrowableError e) {
    // 
}
Run Code Online (Sandbox Code Playgroud)

编辑

好吧,除了上面的解决方案之外,PHP 7+ 处理错误的方式似乎与 PHP 5 有点不同。所以试试这个..

try {
    // 
} catch(Error $e) {
    // This should work
} catch(Throwable $e) {
    // This should work as well
}
Run Code Online (Sandbox Code Playgroud)

  • `FatalThrowableError` 最终确实继承自 `Exception`。每个异常都需要继承自Exception。这不是 JAVA,你不能期望每一个特定的异常。不是这种情况 (2认同)