我必须对某些格式很差的CSV文件(一个文件中有多个表等)进行一些操作。
为此,我正在使用CsvFile.Load并在字符串的Seq上写入函数。
但是,为了管理从那时起可能出现的异常,我编写了这样的函数。
let tryWithResult f i =
try
f i |> Result.Ok
with
| e -> ("Exception Raised: " + e.Message + "\n" + e.Source) |> Result.Error
签名:
val tryWithResult : f:('a -> 'b) -> i:'a -> Result<'b,string>
就F#/ FP的良好做法而言,您认为这是一种正确的方法吗(所以我可以在面向铁路的编程https://fsharpforfunandprofit.com/posts/recipe-part2/中使用它)?
我知道最好避免使用异常处理,但是我希望有一些“安全”的东西,但不要花很多时间。
谢谢
答案 0 :(得分:3)
是的,将所有异常都捕获到Result
中是完全合理的,特别是如果您正在做一个自包含的解决方案。
如果1)您正在设计一个供其他人使用的库,或者2)您的代码是一个较大的框架的一部分,该框架已经处理了未处理的异常并适当地记录了错误,则保留异常是有意义的。