2012-02-19 148 views
0

一种方法对yaml文件执行递归扫描并解析它们,提取一些信息。我使用sfYamlParser来解析yaml。从堆栈跟踪捕获的异常try/catch块中未捕获的异常

try{ 
    $definition = $parser->parse(file_get_contents($filePath));//line 20 
} catch(Exception $e) { 
    throw new Exception("Parsing model definiion '$filePath' failed.", 0, $e); 
} 

摘录:

...Indexer.php(20): sfYamlParser->parse('type: com...') #3 

我包围的调用来解析()在try块和catch“异常$ E”,但我仍然得到一个“致命错误。 ?。为什么是例外而不是通过我的catch块捕获 我没有想到的异常冒泡,然后在我的方法捕获 的COE被命名空间,但“使用的例外”设置

错误讯息话题:

Fatal error</b>: Uncaught exception 'InvalidArgumentException' with message 'Unable to parse line 30 (key;   true).' in [...]/packages/fabpot-yaml/sfYamlParser.php:265 
Stack trace: 
#0 [...]/packages/fabpot-yaml/sfYamlParser.php(201): sfYamlParser-&gt;parse('type:   s...') 
#1 [...]/packages/fabpot-yaml/sfYamlParser.php(201): sfYamlParser-&gt;parse('explicitPrivile...') 
#2 [...]/packages/hydra/source/com/daliaIT/hydra/Indexer.php(20): sfYamlParser-&gt;parse('type:  com...') 
#3 [...]/packages/co3/source/com/daliaIT/co3/PathHelper.php(97): com\daliaIT\hydra\{closure}('packages/hPacks...') 
#4 [...]/packages/hydra/source/com/daliaIT/hydra/Indexer.php(28): com\daliaIT\co3\PathHelper-&gt;scanCallback('packages/hPacks...', 'hmd', Object(Closure)) 

编辑:

好吧,如果我不扔另一个例外,我得到任何致命错误。对不起,我期望的代码崩溃与我定义的错误信息,而不是与原来的异常垃圾,所以:

为什么不解决与“解析模型定义”$ filePath'失败。“?

编辑:

原来PHP有iteresting的方式来处理未捕获的异常:

如果你抛出一个 “新的异常(” 信息 “0,$ previous_exception)” 和不赶上它PHP将显示从$ previous_exception错误消息,而不是“MESSAGE”

+0

你是否抓住了上面指定的catch块的异常? – thetaiko 2012-02-19 16:38:16

+0

堆栈跟踪的其余部分是什么样的? – thetaiko 2012-02-19 16:42:52

+0

“$ parser-> parse(...)”引发了异常“我想tp捕获我上面抛出的异常,但catch块永远不会执行。 – 2012-02-19 16:43:17

回答

2

可能是因为你没有捕获异常,你扔在catch块。

您必须停止在catch块中再次抛出异常,或者在调用方法中新建try/catch。