【问题标题】:Catching errors thrown with `error`?捕获错误引发的错误?
【发布时间】:2012-06-07 06:41:30
【问题描述】:

有些 stdlib 函数会在输入无效时引发错误。例如:

Prelude> read "1o2" :: Int
*** Exception: Prelude.read: no parse

我想将其包装成返回Either e a。我该怎么做?

【问题讨论】:

    标签: haskell exception-handling either


    【解决方案1】:

    There is no spoon.你没听我说。

    不过,对于这个特定示例,您应该改用 reads

    【讨论】:

    • 我喜欢你的措辞。 :) 谢谢你的回答!
    【解决方案2】:

    我更喜欢将错误转化为价值:

     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
          [(x, "")] -> Just x
          _         -> Nothing
    

    【讨论】:

    • 我也更喜欢这样,但问题在于一般这样做。 read 仅用作示例。
    • 我认为,对于任何抛出错误的函数,都会有一个“安全”版本。
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2014-11-29
    相关资源
    最近更新 更多