gpt4 book ai didi

haskell - 无法使用 Control.Exception.try 捕获 "Prelude.read: no parse"异常

转载 作者:行者123 更新时间:2023-12-02 13:21:42 26 4
gpt4 key购买 nike

我试图从文件中读取一些值并捕获可能发生的每个异常(以 "Easier to ask for forgiveness than permission" 的心态)。不过,我在捕获 Prelude.read: no parse 异常时遇到了问题。为了告诉 try 它应该捕获每个异常,我用显式类型 SomeException 定义了 tryAny ,据我所知,它是每个异常的“ super 类型”异常(exception):

import Control.Exception (try,SomeException)
tryAny :: IO a -> IO (Either SomeException a)
tryAny = try

使用 tryAny 我似乎能够捕获 IO 错误:

> tryAny (fromFile "nonExistingFileName")
Left nonExistingFileName: openFile: does not exist (No such file or directory)

但是读取错误不会被捕获:

> tryAny (return ((read "a")::Int))
Right *** Exception: Prelude.read: no parse

我该怎么做才能捕获每个异常?

最佳答案

return 不会评估其参数,因此不会引发任何异常。当您尝试打印结果时,评估发生在 tryAny 之外。

使用evaluate(可能与Control.DeepSeq中的force一起使用,具体取决于您的实际情况)。

关于haskell - 无法使用 Control.Exception.try 捕获 "Prelude.read: no parse"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com