Необработанное исключение в блоке try / catch - PullRequest
0 голосов
/ 19 февраля 2012

Метод выполняет рекурсивное сканирование файлов 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-&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 есть интересный способ справиться с необработанными исключениями:

Если вы выбрасываете «новое исключение (« СООБЩЕНИЕ », 0, $ previous_exception)» и не перехватываете его, PHP будет отображатьсясообщение об ошибке от $ previous_exception и НЕ "MESSAGE"

1 Ответ

2 голосов
/ 19 февраля 2012

Возможно, потому что вы не перехватываете исключение, которое вы бросаете в блоке catch.

Вы должны либо прекратить генерировать исключение снова в блоке catch, либо сделать новую попытку перехватить / вызвать вызывающий метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...