F#尝试使用未处理异常

3
在下面的代码中,我想读取一个文件并返回所有行;如果出现IO错误,我希望程序退出,并将错误消息打印到控制台。但程序仍然遇到未处理的异常。这种情况下最佳实践是什么?(我猜我不需要Some/None,因为我想在出错时退出程序。)谢谢。
let lines = 
    try 
      IO.File.ReadAllLines("test.txt")
    with
    | ex -> failwithf " %s" ex.Message
1个回答

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

如果我使用printfn,如何退出程序? - user8321
1
@user8321 - 当你调用 failwithf 时,你正在引发一个新的异常。你确定不想使用 printfn 吗? - ChaosPandion
@user8321 - 问题在于,如果退出程序,向控制台打印输出将毫无意义。 - ChaosPandion
谢谢。一个小问题是e.HResult无法访问。我在考虑将控制台重定向到日志文件。你有更好的工作流程吗? - user8321
@user8321 - 在退出程序之前,您可以写入Windows事件日志。(不用担心HResult属性,您可以将其替换为0。) - ChaosPandion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接