如何捕获httpLbs(http-client)引发的异常

d8d*_*f42 2 haskell yesod

我有一个使用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
Run Code Online (Sandbox Code Playgroud)

Handler (Response BSL.ByteString) 单子里面。

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

6/Aug/2017:15:14:17 +0200 [Error#yesod-core] HttpExceptionRequest Request { ...
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*man 5

我建议使用tryAny函数从安全的例外库。大致来说,这看起来像:

eres <- tryAny $ httpLbs req man
case eres of
  Left e -> handleException e
  Right lbs -> handleBody lbs
Run Code Online (Sandbox Code Playgroud)

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