2012-01-16 10 views
2

:getCommandfromのユーザーは、ユーザーからいくつかの文字列を取得し、「読み取り」機能を使って、この文字列からいくつかのデータを読み取ろうとするこのコード機能で私は、読み取り機能によって引き起こさ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); 

読み取りが例外スローがある失敗した場合:

*** Exception : prelude.read : no parse 

とプログラムは終了... が、私はこの例外をキャッチすることはできません - この例外のタイプは何ですか?

私は

EはE

+0

[ハスケルの読み込み関数からパーズしない例外をキャッチする方法は?](http://stackoverflow.com/questions/5121371/how-to-catch-a-no-parse-exception-from) -the-read-function-in-haskell) – hammar

+0

それは私がこの例外をキャッチしたいと考えていません... – user606521

+0

2番目の答えは見ましたか? 'try'を使ってキャッチする方法を示していますが、' reads'と 'Maybe'を使って純粋なアプローチを検討することを強くお勧めします。 – hammar

答えて

1

としてインポートControl.Exceptionからです...代わりにE.IOExceptionのE.SomeExceptionも試み "この例外の種類は何ですか?"タイプはErrorCallで、Control.Exceptionからも入手できます。 error関数が呼び出されたときにスローされるのはErrorCallです。 タイプをhandlerに変更するだけで問題ありません。物事を働かせる最後の手段はE.SomeExceptionをキャッチすることですが、それはほとんど常に間違ったことです。

関連する問題