如何捕获 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 转换器。
我有一个使用 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 转换器。