我无法在PHP代码中捕获异常

时间:2012-07-27 08:08:25

标签: php exception-handling

我有以下代码:

function doSomething()
{
     try {
         doSomeNastyStuff() // throws Exception
     } catch(\Exception $e) {
         if ($this->errorHandler) {
             call_user_func($e);
         } else {
             throw($e);
         }
     }
}

但是,catch块不起作用。堆栈跟踪向我显示行doSomeNastyStuff()处发生的错误。问题在哪里?

1 个答案:

答案 0 :(得分:5)

问题是,你正在重新抛出你的异常。堆栈跟踪是Exception实例的一部分,此时会记录,创建异常。您可以通过

获取堆栈跟踪
 $e->getTrace(); // Exception $e

当你在代码中重新抛出异常时,它仍然记录了旧的堆栈跟踪,这会欺骗你的框架向你显示,异常实际发生在doSomeNastyStuff()行,它似乎是catch不起作用。

因此,最好以下列方式重新抛出异常:

/** instead of throw($e) do */
throw new \Exception("Unhandled exception", 1, $e);

从php5.3开始,Exception constructor完全具有可选的第三个参数$previous。然后,您可以使用Exception

获取之前的$e->getPrevious();