2012-01-16 62 views
2

我試圖引起讀功能CACH例外:沒有解析異常

run :: CurrentData -> IO() 
run current = do 
{ 
    x <- (getCommandFromUser) `E.catch` handler; 
    updated <- executeCommand x current; 
    run updated;  
} where handler :: E.IOException -> IO Command 
    handler e = do putStrLn "wrong command format" >> return (DoNothing); 

在這段代碼功能getCommandfrom用戶會從用戶的一些字符串,然後嘗試使用來讀取該字符串的一些數據「讀」功能

如果讀取失敗,有異常拋出:

*** Exception : prelude.read : no parse 

和程序退出... 我不能趕上這個例外 - 這是什麼異常的類型???

我想也E.SomeException代替E.IOException ...

E是從進口Control.Exception爲E

+0

[如何從Haskell的讀取函數中捕獲無分析異常?](http://stackoverflow.com/questions/5121371/how-to-catch-a-no-parse-exception-from -has-read-function-in-haskell) – hammar 2012-01-16 09:13:04

+0

不,不幫助我我想抓住這個例外... – user606521 2012-01-16 09:30:39

+0

你有沒有看到第二個答案?它展示瞭如何使用'try'來捕獲它,但是我強烈建議考慮使用'reads'和'Maybe'的純方法。 – hammar 2012-01-16 09:46:17

回答

1

「這是什麼異常的類型?」該類型是ErrorCall,也可從Control.Exception獲得。 ErrorCall是調用error函數時拋出的。 只需更改handler的類型,它就可以工作。做事情的最後一招是趕上E.SomeException,但這幾乎總是做錯事。