首页 > 解决方案 > 确保处理所有异常

问题描述

源于这个问题,有没有办法确保我处理所有可能抛出的异常?类似于来自编译器的模式匹配详尽警告,但针对异常。我认为这将是有道理的...

标签: haskellexception-handling

解决方案


您可以通过 捕获所有异常SomeException,但这通常是一个坏主意,因为您最终还会捕获从外部抛出到线程的异步异常。

在 Haskell 中,经常使用异步异常来触发其他线程取消线程、发出内存错误信号等。您想要捕获异步异常的情况非常少见;它们在很大程度上与线程正在运行的实际逻辑无关。但是您仍然可以使用诸如bracket和之类的函数,finally以便正确释放被杀死线程持有的资源。

safe-exceptionsunliftio这样的包有助于避免错误地捕获异步异常,同时仍然提供catchAny捕获其他类型异常的功能。


推荐阅读