Haskell Sqlite3 - 捕获异常

时间:2013-12-31 21:23:12

标签: sqlite exception haskell catch-block

我想知道如果通过以下代码提出我将如何捕获异常

query_3 <- quickQuery' conn_1 "SELECT MAX(high) \
                              FROM historicalData " []                                    
mapM_ (putStrLn . convertSqlValToString) query_3   

我知道可以使用名为&#34; catchSql&#34; ,但不知道如何在上面的代码中使用它

1 个答案:

答案 0 :(得分:1)

我现在无法测试,但请尝试以下方法:

handleSql print $ do
    query_3 <- quickQuery' conn_1 "SELECT MAX(high) FROM historicalData" []
    mapM_ (putStrLn . convertSqlValToString) query_3

使用

handleSql :: (SqlError -> IO a) -> IO a -> IO a

(只有catchSql :: IO a -> (SqlError -> IO a) -> IO a,其参数被反转)。

函数handleSql运行作为其第二个参数的操作,在您的情况下quickQuery'后跟mapM_。如果在该部分期间发生SqlError,则将其传递给作为第一个参数给出的函数。因此,在上面的示例中,如果在内部阻止期间发生SqlErrorhandleSql将在其上调用print ..