如何捕获httpLbs抛出的异常(http-client)

时间:2017-08-16 13:40:14

标签: haskell yesod

我有一个使用http-client https://www.stackage.org/haddock/lts-9.0/http-client-0.5.7.0/Network-HTTP-Client.html#v:httpLbs的yes应用程序。我在打电话

resp <- httpLbs req man

Handler (Response BSL.ByteString) monad。

我得到了这个(在应用程序的日志中)

6/Aug/2017:15:14:17 +0200 [Error#yesod-core] HttpExceptionRequest Request { ...

(下一行代码永远不会被执行)

相反,我想捕获异常,并在我的代码中处理它。怎么样?

1 个答案:

答案 0 :(得分:5)

我建议使用safe-exceptions库中的tryAny功能。粗略地说,这看起来像:

eres <- tryAny $ httpLbs req man
case eres of
  Left e -> handleException e
  Right lbs -> handleBody lbs

使用安全例外将帮助您避免使用异步异常和monad变换器可能遇到的一些极端情况。