繁体   English   中英

try / catch块中未捕获的异常

[英]Uncaught exception in try/catch block

一种方法对yaml文件执行递归扫描并解析它们,提取一些信息。 我使用sfYamlParser解析Yaml。 我将对parse()的调用包含在try块中,并捕获了“ Exception $ e”,但仍然收到“致命错误:未捕获的异常”。

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 

为什么异常没有被我的catch块捕获? 我确实希望异常冒出来,然后陷入我的方法中。 coe被命名为名称空间,但是设置了“ use Exception”。

错误消息:

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具有一种处理未捕获异常的迭代方法:

如果抛出“ new Exception(“ MESSAGE”,0,$ previous_exception)“并且没有捕获,PHP将显示$ previous_exception的错误消息,而不是” MESSAGE“

可能是因为您没有捕获在catch块中引发的异常。

您必须停止在catch块中再次引发异常,或者在调用方法中尝试新的catch /。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM