我想创建一个函数,True当一个函数抛出任何异常,False如果没有抛出异常,则返回该函数。
但是我还没有办法找到一种使用的方法来做到这一点的catch方法Control.Exception。
我想捕捉由引发的错误,[1,2] !! 3也要捕捉由引起的自定义错误error "Error msg"。
您可以使用catch以下方法:
example :: IO ()
example = do
let handler :: SomeException -> IO Bool
handler e = do
putStrLn "Exception caught:"
print e
return False
res <- (evaluate ([1,2::Int] !! 3) >> return True) `catch` handler
print res
Run Code Online (Sandbox Code Playgroud)
最后一个print将True在正常终止和False异常终止时打印。
可以删除处理程序中的输出消息-仅用于说明。
SomeException如果您只想捕获某些异常类型,则可以用任何更特定的异常类型替换。
请注意,您无法在IO之外捕获异常,这使异常更加有限。因此,!!应避免使用部分函数,而应首选返回Maybe a类型的函数,该函数的输出可在任何地方进行检查。