2012-02-19 2 views
0

메서드는 yaml 파일에 대한 재귀 검사를 수행하고 파싱 한 후 일부 정보를 추출합니다. 나는 yaml을 파싱하기 위해 sfYamlParser를 사용한다. 나는 try 블록 및 캐치 "예외 $ 전자"에() 구문 분석하기 위해 전화를 동봉하지만 난 여전히 "치명적인 오류를 얻을 :. 캐치되지 않는 예외를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 

.?. 왜 "사용 예외가"설정을 제외하고 내 방법에 잡힐 후까지 거품에 예외를 기대했다 내 catch 블록에 의해 COE는 네임 스페이스입니다 을 잡은 것이 아니라

오류 님에게 메일 :

,451,515,
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)) 

편집 :

좋아, 내가 더 치명적인 오류가없는 다른 예외를 포기하지 않는다면. 죄송합니다, 원래 예외 messgae와 함께, 내가 정의한 오류 메시지와 충돌하는 코드를 예상했다 :

왜 "$ params '$ filePath'구문 분석 모델 실패 실패하지?"

편집 :

는 PHP가 캐치되지 않는 예외를 처리 할 수있는 iteresting 방법이 밝혀 :

당신은 "새로운 예외를 ("메시지 ", 0, $의 previous_exception)"을 던져하지 않을 경우 catch PHP는 $ previous_exception에서 "MESSAGE"가 아닌 오류 메시지를 표시합니다.

+0

위에서 지정한 catch 블록에 던져 넣은 예외를 catch합니까? – thetaiko

+0

나머지 스택 트레이스는 어떻게 생겼습니까? – thetaiko

+0

"$ parser-> parse (...)"에 의해 예외가 발생했습니다. 위의 예외를 잡으려고하지만 catch 블록은 실행되지 않습니다. –

답변

2

아마도 catch 블록에 던져 넣는 예외를 catch하지 않기 때문일 수 있습니다.

catch 블록에서 예외를 다시 throw하거나 호출 메서드에서/try catch를 새로 시도해야합니다.

관련 문제