如何在 Haskell 中捕获除零错误?

7

对于类似“文件未找到”的情况,下面的代码基本结构可以使用,但对于除以零的异常情况无法捕获。如何捕获除以零的异常?

import Control.Exception.Base
import Data.Array

main = toTry `catch` handler

toTry = do
    print "hi"
    print (show (3 `div` 0))
    print "hi"

handler :: IOError -> IO ()
handler e = putStrLn "bad"

请参见 https://dev59.com/J2025IYBdhLWcg3wblc3 中有关Haskell中异常处理的内容。 - DJG
1个回答

10

你需要一个处理程序来捕获 ArithException,并匹配 DivideByZero

import Control.Exception.Base
import Data.Array

main = toTry `catch` handler

toTry = do
    print "hi"
    print (show (3 `div` 0))
    print "hi"

handler :: ArithException -> IO ()
handler DivideByZero = putStrLn "Divide by Zero!"
handler _ = putStrLn "Some other error..."

有没有什么东西可以作为 catch all? - user782220
1
您可以编写一个处理程序来捕获SomeException,以便无论类型如何都可以捕获任何异常。 - YellPika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接