gpt4 book ai didi

exception - 如何追踪未捕获异常的类型?

转载 作者:行者123 更新时间:2023-12-04 16:34:22 25 4
gpt4 key购买 nike

来自 JVM 语言,每当未捕获异常时都会输出庞大的堆栈跟踪,当我看到类似 connect: does not exist (Connection refused) 的内容时,我感到很沮丧我的程序的输出中没有其他内容,然后它关闭了。我知道一些异常被引发但没有被捕获。我什至预计会发生异常,因为我试图连接到离线服务器。所以我需要的只是一种处理这个异常的方法,但我不明白我应该如何找出该异常的类型。

直到今天,我通常所做的只是谷歌搜索特定的消息,并通过所有邮件列表文件或源文件进行挖掘以搜索信息,但这不是正确的方法。所以,我的问题如标题所示:

如何追踪未捕获异常的类型?

最佳答案

您可以使用 typeOf 打印异常的类型:

import Data.Typeable
import Control.Exception
import System.IO.Error

blackbox1 :: IO ()
blackbox1 = throw $ mkIOError doesNotExistErrorType "blackbox1" Nothing (Just "evil")

blackbox2 :: IO ()
blackbox2 = throw DivideByZero

traceExceptionName :: IO () -> IO ()
traceExceptionName act = act `catch` \(SomeException e) -> do
let rep = typeOf e
tyCon = typeRepTyCon rep
putStrLn $ "## Exception: Type " ++ show rep ++ " from module " ++ tyConModule tyCon ++ " from package " ++ tyConPackage tyCon
-- throw e -- Rethrow exception.

main :: IO ()
main = do
traceExceptionName blackbox1
traceExceptionName blackbox2

示例输出
$ runhaskell ./main.hs            
## Exception: Type IOException from module GHC.IO.Exception from package base
## Exception: Type ArithException from module GHC.Exception from package base

关于exception - 如何追踪未捕获异常的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564906/

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