Ocaml 处理异常:失败“;“n”;

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

在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/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在所有这些原语已经实现的地方进行测试。