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

how to catch an exception thrown by httpLbs (http-client)

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

resp <- httpLbs req man

Handler (Response BSL.ByteString) monad 中。

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

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

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

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

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

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

使用安全异常将帮助您避免一些极端情况,否则您可能 运行 使用异步异常和 monad 转换器。