首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Snap中捕获HTTPException

在Snap中捕获HTTPException
EN

Stack Overflow用户
提问于 2016-05-02 23:47:26
回答 1查看 233关注 0票数 1

在我的一个快照处理程序中,我使用HTTP客户端调用外部资源,它可以抛出一个HttpException。在最简单的情况下,我只想在调试时捕获错误并写入std;但是,我很难将类型排列起来。

代码语言:javascript
复制
assignCategories' :: String -> [String] -> Handler App (AuthManager App) String
assignCategories' l_id cats  = do
            let baseAttribs = M.fromList [("id",l_id)]                                                            
            let saveQuery = WMSaveObject {baseAttributesSO= baseAttribs ,relatedSO=relatedObjects}

            -- this is the function that can throw an HTTPException            
            -- runWMSave :: WMQueryObj -> Handler App (AuthManager App) String

            saveresponse <- try $ H.runWMSave saveQuery
            return $ case saveresponse of
                Left  e -> show (e :: HttpException)
                Right r -> r

我玩过这些类型,但通常都会出现以下错误.是否有在处理程序中调用HTTP并捕获异常的最佳实践?

我在用Control.Monad.Catch。我试着使用Control.Exception的try,但在排列类型时遇到了更多的困难。

代码语言:javascript
复制
   No instance for (Control.Monad.Catch.MonadCatch
                       (Handler App (AuthManager App)))
      arising from a use of ‘try’
    In the expression: try
    In a stmt of a 'do' block:
      saveresponse <- try $ H.runWMSave saveQuery
    In the expression:
      do { liftIO $ putStrLn l_id;
           let baseAttribs = M.fromList ...;
           let relatedObjects = concatMap makeRelatedRow cats;
           let saveQuery = ...;
           .... }

谢谢,尼尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 04:11:47

问题解决了,我使用了MonadCatchIO变压器的try,这就奏效了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36993372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档