当前位置: 首页 > 知识库问答 >
问题:

在“exceptt”计算中处理不同的错误类型

田柏
2023-03-14
data MyError = Error1 | Error2 | Error3

f :: IO (Either MyErrorType Text)
f = do
  now <- someIoAction

  runExceptT $ do
    x <- note Error1 $ hush LibraryA.f
    y <- ExceptT $ note Error2 . hush <$> LibraryB.IO.f
    z <- ExceptT $ note Error3 . hush <$> LibraryB.IO.g
    pure (x, y, z)

共有1个答案

廉志强
2023-03-14

如果您只想处理一次错误,id将IO(Ey a)转换为IO a,使用如下的实用函数:

throwWhenLeft :: Exception e => IO (Either e a) -> IO a
throwWhenLeft io = either throwIO return =<< io

这看起来很危险,但在某些(非常常见的,IMO)情况下是有用的:

  • 您必须处理由IO A或某些e A引发/返回的各种异常。
  • 异常处理程序的操作几乎总是相同的。
 类似资料:
  • 我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?

  • 正确性-类定义了一个不等于计算值的计算serialVersionUID 这个serializable类定义了一个serialVersionUID,它似乎是一个计算值,但是该值与计算值不匹配,因此失去了作为版本指示符的值。或者创建一个自定义值,如1、2、3、4。。等等,或者使用IDE重新计算serialVersionUID。 可能是指领域: 为什么18234907734L无效?

  • 前面出现的例子确实很方便;都是 Result 和其他 Result 交互,还有 Option 和其他 Option 交互。 有时 Option 需要和 Result 进行交互,或是 Result<T, Error1> 需要和 Result<T, Error2 进行交互。在这类情况下,我们想要以一种方式来管理不同的错误类型,使得它们可组合且易于交互。 在下面代码中,unwrap 的两个实例生成了不同

  • 当我使用Angular HttpClient发出GET请求时,我得到一个可观察的返回,并在RxJS操作符mergeMap中处理它。 现在一次又一次地抛出404,我想抓住它。最后,浏览器控制台中不应出现错误消息,并且应使用流的下一个值处理管道。 这有可能吗?我没有用catchError()管理它。 以下是我的代码的简化版本: 更新:添加了带有catchError()的方法 我尝试过这种方式,但没有检

  • 我正在使用Laravel 5.5,并试图实现用户和管理员的多重身份验证。我得到这个错误时,我试图调用管理员登录表单在浏览器。 错误: 声明应用\Exceptions\Handler::未经身份验证($请求,应用\Exceptions\身份验证异常$异常)应与Illumate\Foundation\Exceptions\Handler兼容::未经身份验证($请求,Illumate\Auth\身份验证

  • 如何抑制FreeMarker模板错误?我在这里查看:http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html,但我不明白如何“templateexceptionhandler.ignore_handler”我正在使用Struts2,还如何显示另一个ftl页面,而不是显示堆栈跟踪? 这仅仅是把这条线放在正确的位置上的问