引发异常
This commit is contained in:
parent
ee20268ce2
commit
38c49a703f
|
@ -18,5 +18,6 @@
|
|||
<Compile Include="TypeCreating.fs" />
|
||||
<Compile Include="PatternMatching.fs" />
|
||||
<Compile Include="ComputationExpressions.fs" />
|
||||
<Compile Include="ExceptionThrowing.fs"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,43 @@
|
|||
module ExceptionThrowing
|
||||
|
||||
open System
|
||||
// 异常引发
|
||||
|
||||
// 创建异常类型
|
||||
exception ErrorMessage of string
|
||||
// 使用exception关键字创建异常类型实际上是继承自System.Exception的新类型
|
||||
|
||||
try // 使用try捕获异常
|
||||
Some (10 / 0)
|
||||
with // 使用 with匹配异常信息,按顺序挨个匹配代码块中的每个模式
|
||||
| :? DivideByZeroException -> printfn "除数不能为0"; None
|
||||
|> ignore // 忽略值, try with也是表达式
|
||||
|
||||
// 异常可以是.NET异常,也可以是F#异常,同样可以是自定义异常
|
||||
|
||||
let div x y =
|
||||
try
|
||||
if y = 0 then
|
||||
raise (ErrorMessage ("除数不能为0")) // 使用raise函数将引发异常,形如C#的throw
|
||||
else
|
||||
raise (ErrorMessage ("没啥问题"))
|
||||
with
|
||||
| ErrorMessage (e) -> printfn "%s" e
|
||||
|
||||
div 10 0
|
||||
|
||||
try
|
||||
try // 使用try捕获异常
|
||||
Some (10 / 0)
|
||||
with // 使用 with匹配异常信息
|
||||
| :? DivideByZeroException -> printfn "除数不能为0"; None
|
||||
|> ignore
|
||||
finally
|
||||
printfn "不管发生什么都会执行"
|
||||
|
||||
// 不管是否引发异常,finally都将执行
|
||||
// try with与try finally是相互独立的表达式
|
||||
// 如果需要with与finally代码块,请嵌套使用
|
||||
|
||||
// reraise函数可重新引发异常
|
||||
// failwith函数可引发F#异常,生成的异常是System.Exception类型
|
Loading…
Reference in New Issue