Метод выполняет рекурсивное сканирование файлов 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
Почему исключение не перехватывается моим блоком перехвата? Я ожидал, что Исключение всплывет, а затем будет перехвачено в моем методе. Коэффициент находится в пространстве имен, но задано "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->parse('type: s...')
#1 [...]/packages/fabpot-yaml/sfYamlParser.php(201): sfYamlParser->parse('explicitPrivile...')
#2 [...]/packages/hydra/source/com/daliaIT/hydra/Indexer.php(20): sfYamlParser->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->scanCallback('packages/hPacks...', 'hmd', Object(Closure))
РЕДАКТИРОВАТЬ:
Хорошо, если я не выбрасываю другое исключение, я не получаю фатальной ошибки. Извините, я ожидал сбой кода с сообщением об ошибкеЯ определил, а не с исходным сообщением об исключении, поэтому:
почему не происходит сбой с «Сбой определения модели $ filePath».?
РЕДАКТИРОВАТЬ:
Оказывается, у PHP есть интересный способ справиться с необработанными исключениями:
Если вы выбрасываете «новое исключение (« СООБЩЕНИЕ », 0, $ previous_exception)» и не перехватываете его, PHP будет отображатьсясообщение об ошибке от $ previous_exception и НЕ "MESSAGE"