【问题标题】:Haskell: abort writeFile on errorHaskell:出错时中止writeFile
【发布时间】:2016-09-17 01:25:01
【问题描述】:

我有一个程序可以生成 JSON 并将其打印到文件中。生成 JSON 的函数可能会在代码生成过程中失败。

在 JSON 生成失败的那一刻,到那时生成的代码仍然被写入文件,给我一个不完整/不正确的输出文件。

我试图弄清楚如何防止写入错误的输出。比如:

main = do
  let
     output          =  encodingfunction
     print' (Just x) =  writeFile "outputfile" output
     print' _        =  putStrLn "Encoding Failed Miserably"
  print' ouput
  return ()

encodingfunction :: Maybe String

【问题讨论】:

  • 您需要 encodingFunction 进行更改,返回 Maybe String 而不是返回可能在某些时候出现错误的 String
  • @amalloy 我已经对encodingfunction 进行了更改,但我仍然遇到同样的问题。我是否必须将程序中的每个函数都更改为 Maybe 类型?
  • 如所写,您的代码应该可以工作,尽管您应该在writeFile 调用中使用x 而不是output。如果您仍然遇到问题,请提供[最小、完整且可验证的示例])stackoverflow.com/help/mcve),以便回答者可以看到问题所在。

标签: haskell error-handling io


【解决方案1】:

您可能想要强制评估返回的字符串,以便在开始写入文件之前确保编码功能已完成。也许你可以在打印之前检查它的长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2021-08-19
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多