我正在尝试缓解由read函数引起的异常:
run :: CurrentData -> IO ()
run current = do
{
x <- (getCommandFromUser) `E.catch` handler;
updated <- executeCommand x current;
run updated;
} where handler :: E.IOException -> IO Command
handler e = do putStrLn "wrong command format" >> return (DoNothing);
在此代码函数中,getCommandfrom用户从用户获取一些字符串,然后尝试使用“read”函数从该字符串中读取一些数据
如果读取失败,则会抛出异常:
*** Exception : prelude.read : no parse
和程序退出... 我无法捕捉到这个异常 - 这个异常的类型是什么???
我还尝试了E.SomeException而不是E.IOException ...
E来自导入Control.Exception As E
答案 0 :(得分:1)
“这个例外的类型是什么?”类型为ErrorCall
,也可从Control.Exception
获取。 ErrorCall
是调用error
函数时抛出的内容。
只需更改handler
的类型即可。让事情发挥作用的最后手段是抓住E.SomeException
,但这几乎总是错误的。