IO String) $ readF-6ren">
gpt4 book ai didi

haskell - 处理 SomeException 被忽略

转载 作者:行者123 更新时间:2023-12-04 05:21:56 24 4
gpt4 key购买 nike

我有一个常用的 haskell 代码,它读取文件并处理任何异常:

handle ((\_->return "ERROR") :: SomeException -> IO String) $ readFile "file.txt"

当我尝试读取错误的编码文件时,我总是会收到错误消息:

*** Exception: file.txt: hGetContents: invalid argument (invalid byte sequence)

并且程序不会进入我的异常处理函数。我还尝试使用 IOErrorIOException 类型而不是 SomeException 但它没有任何改变。

如果我用句柄打开类似的文件并用代码读取它:

handle ((\_->return "ERROR") :: SomeException -> IO String) (hGetContents myHandle)

工作正常。

如何正确捕获由 readFile 传递的 hGetContents 抛出的异常?

最佳答案

您可以强制在捕获范围内读取整个字符串:

Control.Exception.handle
((\_ -> return "ERR") :: Control.Exception.SomeException -> IO String)
(Prelude.readFile "file.txt" >>= \res -> res `deepseq` (pure res))
"ERR"

关于haskell - 处理 SomeException 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814298/

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