尝试..捕获和文件句柄范围

时间:2015-09-22 09:47:34

标签: ocaml

我目前有以下代码

    let some_funct() = 
    (
        let handle = open_in "Myfle.dat" in

        try     
             ...
             ...    

        with e -> 
           close_in_noerr handle;
           raise e ;
    );;

代码工作正常。唯一的问题是当程序“Myfle.dat”丢失时我的程序终止。我相信的原因是open_in方法没有在try语句中被调用。如果我在try块下移动该语句,则handle块中with e变量不可见。我不知道如何解决这个问题。有什么建议 ?

1 个答案:

答案 0 :(得分:1)

您可以在尝试打开文件之前检查文件是否存在,或者使用两个嵌套的try/catch。使用with_file函数更好,它将接受文件名以及将在打开的通道上调用的函数。 with_file函数将保证在任何情况下都将释放资源。它不是标准库的一部分,但可以在扩展标准库(例如Janestreet Core Library)中使用,也可以手动编写。