一、函数本身崩溃,自己产生异常。
二、对于if和case子句,找不到匹配发生异常。
三、人工抛出异常
1、exit(why)
当想要终止当前进程时,就需要用到这个函数。如果这个异常未被捕获,那么系统会向所有与当前进程相连接的进程广播{'EXIT',Pid,Why}消息。
2、throw(why)
这个函数用于抛出一个调用者可能会捕获的异常,
3、erlang:error(Why)
这个函数用于抛出那些崩溃异常。
四、
处理语法
1、
try FuncOrExpressionSequence of
Pattern1 [when Guard1]->Expressions1;
Pattern2 [when Guard2]->Expressions2;
catch
ExceptionType:ExPattern1 [whenExGuard1]->Expressions1;
ExceptionType:ExPattern2 [whenExGuard2]->Expressions2;
...
after
AfterExpressions
end
2、
使用catch原语,转换异常为描述这个错误的一个元组。
catch generate_exception(I)
五、
1、捕获所有可能的异常
try Expr
catch
_:_->.......code.....
end
2、忽略异常标签,不能捕获所有的错误
try Expr
catch
_->.......code.....
end