我制作了一个程序,用户可以在终端中输入突击队,但是当用户输入“退出”时出现异常。我怎么抓住它?下面的代码只是一个片段,因为我的代码很长。
let mutable input = ""
while myTurn = true do
input <- System.Console.ReadLine()
match input with
|_ when input = "quit" -> (myTurn <- false)
|_ -> printfn "Incorrect input"
现在,当我输入“quit”时,我的终端给出了 System.IndexOutOfRangeException 但是,如果我将“退出”更改为任何其他词,它就会起作用。有没有办法让它与退出这个词一起工作?
答案 0 :(得分:2)
您发布的代码无法编译(未定义 myTurn、startPos、endPos),所以不,它实际上并不是 Sergey Berezovskiy 要求的 MRE。即使你的代码被修改为
let mutable myTurn = true
let mutable input = ""
while myTurn = true do
input <- System.Console.ReadLine()
match input with
|_ when input = "quit" -> (myTurn <- false)
|_ -> printfn "Incorrect input"
它在输入“quit”时不会抛出异常。所以我无法帮你追踪异常。
然而,您实际上问的是如何捕获异常,为此您需要一个 try ... with ...
。例如
try potentiallyThrowingFunction "abc" 123
with e -> printfn "Oh snap!"
将捕获任何异常并将某些内容打印到控制台。异常处理路径需要返回与尝试路径相同的类型,因此如果 potentiallyThrowingFunction
返回一个 int
,异常处理代码也需要返回一个 int
(或抛出一个新的异常或重新抛出原来的)
实际上,如果您想以不同的方式处理不同的异常,您可以使用 try ... with ...
对异常进行模式匹配;例如
try potentiallyThrowingFunction "abc" 123
with
| :? System.ArgumentException as e ->
printfn "Oh dang! ArgumentException: %s" e.Message
| :? System.IndexOutOfRangeException as e ->
printfn "Woops, IndexOutOfRangeException: %s" e.Message