Ocaml 处理异常:失败“;“n”;
在Python中,使用单元测试管理某些错误非常简单。例如,为了验证列表是否为空,我可以使用Ocaml 处理异常:失败“;“n”;,ocaml,Ocaml,在Python中,使用单元测试管理某些错误非常简单。例如,为了验证列表是否为空,我可以使用assert test!=[] 假设空的列表let test=[] try ignore (nth test 0) with Not_found -> print_string("Erreur!");; Exception: Failure "nth" 当我遇到异常时,我需要抛出一个错误-print\u string(“Erreur!”):Failure“nth”。到目前为止,try/wi
assert test!=[]
假设空的列表let test=[]代码>
try
ignore (nth test 0)
with
Not_found -> print_string("Erreur!");;
Exception: Failure "nth"
当我遇到异常时,我需要抛出一个错误-print\u string(“Erreur!”)
:Failure“nth”
。到目前为止,try/with
并没有真正帮助我。在Ocaml中,是否有一种解决方法,可以在出现异常时引发错误并打印某些内容:失败“nth”?您似乎在问是否可以测试特定的异常。对带有的之后的异常处理部分是一个模式列表,类似于匹配
表达式
try
ignore (List.nth [] 0)
with
| Not_found -> ()
| Failure s -> print_string ("Erreur: " ^ s)
| _ -> ()
(依赖作为Failure
参数提供的确切字符串可能是不明智的。事实上,编译器警告您不要这样做。)
OCaml还有一个assert
表达式:
# let list = [] in assert (List.length list > 0);;
Exception: Assert_failure ("//toplevel//", 1, 17).
当然,您可以使用try/with
来处理产生的异常。Assert\u failure
的参数给出了文件名、行号和行上的字符号。您似乎在问是否可以测试特定的异常。对带有
的之后的异常处理部分是一个模式列表,类似于匹配
表达式
try
ignore (List.nth [] 0)
with
| Not_found -> ()
| Failure s -> print_string ("Erreur: " ^ s)
| _ -> ()
(依赖作为Failure
参数提供的确切字符串可能是不明智的。事实上,编译器警告您不要这样做。)
OCaml还有一个assert
表达式:
# let list = [] in assert (List.length list > 0);;
Exception: Assert_failure ("//toplevel//", 1, 17).
当然,您可以使用try/with
来处理产生的异常。Assert\u failure
的参数给出了文件名、行号和行上的字符号
在Python中,通过单元测试管理某些错误非常简单。例如,为了验证列表是否为空,我可以使用assert test!=[]
您可以在OCaml中执行完全相同的(模语法)
此外,测试框架(例如)为这些特定情况提供了特殊功能,如assert\u
在Python中,通过单元测试管理某些错误非常简单。例如,为了验证列表是否为空,我可以使用assert test!=[]
您可以在OCaml中执行完全相同的(模语法)
此外,测试框架(例如)为这些特定情况提供了特殊功能,如assert\u raises
。raisetest!=[]
不是有效的Python。也许你的意思是断言测试!=[]
?提升测试!=[]
不是有效的Python。也许你的意思是断言测试!=[]
?我可以用错误消息进行断言吗?我知道这不好,但我可以说assert(xs[];print_string“列表已清空!”)
。也许一个等价物可能是if-cond中的assert(让cond=(xs[]),然后打印字符串“List empty”;cond)
您可以编写一个函数,let-assert\u message cnd msg=如果不是cnd那么failwith msg
,然后将其用作assert\u message(xs[])“不应该是空的”
。您还可以定义自己的异常,非常简单,如异常My_字符串异常
,同样,您可以使用OUnit2测试所有这些原语已经实现的位置。我可以用错误消息断言吗?我知道这不好,但我可以说assert(xs[];print_string“列表已清空!”)
。也许一个等价物可能是if-cond中的assert(让cond=(xs[]),然后打印字符串“List empty”;cond)
您可以编写一个函数,let-assert\u message cnd msg=如果不是cnd那么failwith msg
,然后将其用作assert\u message(xs[])“不应该是空的”
。您还可以定义自己的异常,就像异常My_字符串异常
一样简单,同样,您可以使用OUnit2在所有这些原语已经实现的地方进行测试。