2011-02-11 4 views
3

다음 코드에서 파일을 읽고 모든 행을 반환합니다. 입출력 에러가 발생하면, 콘솔로 에러 메시지를 출력하면서 프로그램 종료를 원합니다. 그러나이 프로그램은 여전히 ​​처리되지 않은 예외로 실행됩니다. 이것에 대한 가장 좋은 방법은 무엇입니까? (나는 어쨌든 오류가 발생하면 프로그램 종료를 원하기 때문에 Some/None이 필요 없다고 생각합니다.) 감사합니다.F # 처리되지 않은 예외로 시도하십시오

let lines = 
    try 
     IO.File.ReadAllLines("test.txt") 
    with 
    | ex -> failwithf " %s" ex.Message 

답변

4

유형 테스트 패턴 일치 작업을 수행 할 수 있습니다.

let lines = 
    try 
     IO.File.ReadAllLines("test.txt") 
    with 
    | :? System.IO.IOException as e -> 
     printfn " %s" e.Message 
     // This will terminate the program 
     System.Environment.Exit e.HResult 
     // We have to yield control or return a string array 
     Array.empty 
    | ex -> failwithf " %s" ex.Message 
+0

printfn을 사용하면 어떻게 프로그램을 종료 할 수 있습니까? – user8321

+1

@ user8321 -'failwithf'를 호출하면 새로운 예외가 발생합니다. 물론'printfn'을 사용하고 싶지 않으십니까? – ChaosPandion

+0

@ user8321 - 프로그램을 종료하면 콘솔에 인쇄하는 것이 의미가 없습니다. – ChaosPandion

관련 문제