Exception 如何在Erlang中抛出异常?

Exception 如何在Erlang中抛出异常?,exception,erlang,Exception,Erlang,我是Erlang新手,我在《用户指南》中找到了如何处理异常,但没有找到如何抛出异常。可以定义并抛出我自己的异常吗?这是来自 使用exit(为什么)引发Erlang异常的示例 现在,让我们编译异常模块,调用sample_error()函数并观察>引发的异常的输出 你的意思是这样吗?你也可以发布你的ans,就像你用来引用别人的方式一样。我相信,这不是“引发erlang异常”的确切引语;-)这个答案是错误的,即使除了文本throw/1不生成异常,它执行非本地返回。生成的错误是没有任何内容可以捕获已抛出

我是Erlang新手,我在《用户指南》中找到了如何处理异常,但没有找到如何抛出异常。可以定义并抛出我自己的异常吗?

这是来自

使用exit(为什么)引发Erlang异常的示例

现在,让我们编译异常模块,调用sample_error()函数并观察>引发的异常的输出


你的意思是这样吗?你也可以发布你的ans,就像你用来引用别人的方式一样。我相信,这不是“引发erlang异常”的确切引语;-)这个答案是错误的,即使除了文本
throw/1
不生成异常,它执行非本地返回。生成的错误是没有任何内容可以捕获已抛出的值。使用
exit/1
error/1
生成异常。@用今天的Erlang术语来说,抛出只是另一种异常。(毕竟,这与退出和错误的机制是一样的。)将其称为非局部返回更多的是一个如何在程序中使用异常的问题。@RichardC是的,在今天的术语中可能是这样,但它们的行为不属于异常。例如,除非没有捕获到抛出,否则抛出不会生成真正的异常。我认为您使用的
抛出
退出
错误
中的哪一个应该清楚地表明意图。那么,“真正的例外”是什么呢?抛出仍然是一个异常(显示用户代码应该捕获它的意图);如果它没有被捕获,它只会转换成另一种异常(错误)。我对异常的定义是“由异常机制传播的东西,而不是正常的返回值”,所有的error/exit/throw都符合这个描述。它们的行为基本相同,只是不同类别的异常。
-module(exceptions).

-export([sample_error/0]).

sample_error() -> throw(“some bad happened”).
erlc –o ebin src/exceptions.erl
erl –pa ebin

1> exceptions:sample_error().
** exception throw: "some bad happened"
  in function  exceptions:sample_error/0