热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

erlang顺序编程错误处理04

只考虑合法的输入参数,对非法的参数返回值,而是应该抛出一个异常错误。这条规则被称为“任其崩溃”。异常类型:模式匹配错误传入错误格式参数

只考虑合法的输入参数,对非法的参数返回值, 而是应该抛出一个异常错误。这条规则被称为“任其崩溃”。

异常类型:


  • 模式匹配错误
  • 传入错误格式参数
  • 带有错误值的 参数 2/0

exit(Why) :想要终止当前进程,用它。没有被捕获,会广播给所有连接的其他进程。

throw(Why) :抛出一个调用者可以捕获的异常。

error(Why) :系统崩溃

try...catch 捕获异常 

try ... of ..catch ...end 异常是在of之前捕获,try...catch...end异常是在catch前捕获

generate_exception(1) -> a;
generate_exception(2) -> throw(a);
generate_exception(3) -> exit(a);
generate_exception(4) -> {'EXIT',a};
generate_exception(5) -> error(a).demo1() -> [catcher(I) || I <- [1,2,3,4,5]].catcher(N) ->try generate_exception(N) of Val -> {N,normal,Val}catchthrow:X -> {N,caught,thrown,X};exit:X -> {N,caught,exit,X};error:X -> {N,caught,error,X}end.

捕获异常方式2,不同量级的调试 信息。

demo2() -> [{I,(catch generate_exception(I))} || I <- [1,2,3,4,5]].

指定异常抛出

sqrt(X) when X <0 ->error({"square error <0 value", X});
sqrt(X) ->math:sqrt(X).

换种使用方式,正常做什么,异常做什么

case f(X) of {ok,Val} -> {"success",Val};{error,Why} -> {"error",Why}
end.

上面都是指定了错误类型的代码,下面是捕获所有错误代码

有错误标签  _下划线类似模糊查询

try f(X)
catch_:_ -> {"failure",X}
end.

没标签

try f(X)
catch_ -> {"失败!",X}
end.

栈跟踪,找到错误的跟踪信息,找到错误的具体位置

此栈跟踪信息不会记录函数被调用时的位置,只会记录它将要返回的位置。

erlang:get_stacktrace()

demo3() -> try generate_exception(5)catcherror:X ->{X,erlang:get_stacktrace()}end.

 在 try_test.erl这个类下第9行,generate_exception方法报错

 

 

 


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有