`

[笔记]erlang的异常处理

 
阅读更多

erlang的异常处理没有什么太大的特别的

异常分为:

  • error
  • throw
  • exit(一般正常退出也用这个)

原来的做法是用catch:

1> catch 0.
0
2> catch throw(0).
0
3> catch a=b.
{'EXIT',{{badmatch,b},[{erl_eval,expr,3,[]}]}}
4> catch exit(0).
{'EXIT',0}

 从上到下分别是:

正常:直接输出

throw异常:直接输出异常原因

error(匹配错误):输出详细内容

exit:输出退出和退出原因

 

然后有一个例子 简单记一下:

-module(excep).
-export([ec_test/0]).

ec_test() ->
try
  %% throw("throw exception") %抛出一个异常
  %% 0                        %正常输出
  %% a=b                      %一个匹配错误
  exit(0)
of
  0 ->io:format("0~n");
  _ ->io:format("other~n")
catch
  throw:Case -> io:format("throw exception:~p~n",[Case]);
  error:Case -> io:format("error:~p~n",[Case]);
  exit:Case  -> io:format("exit:~p~n",[Case]) 
after
  io:format("program exit~n")
end.

 格式可以是:

  • try...catch...
  • try..of..catch
  • try...after,,,,
  • 或者以上的 try...of...catch...after

 

只有try那边抛出的异常才会被捕获到

of和catch出现异常不会被捕获

after无论如何都会被执行,如果after有异常那么他的异常会取代掉try中的异常

 

这边的格式也需要注意

最后一定会有个end说明结束了

但每一块中的最后一个语句是不用加符号的(不用写 ,(逗号) 或者 ;(分号))

 

也顺便说下我关于符号的理解吧

句号 . 表示结束(用于shell输入语句 或者函数结束等)

分号 ; 表示并列(用书case if 和同名函数的并列)

逗号 . 表示顺序执行(好像说的不太对 when的条件,语句等)

        $ 取对应字符的数值

        # 进制#数值 例如 2#0101(5).

 

其他的内容

erlang:get_stacktrace(). 获得异常堆栈

erlang:raise(错误类别,原因,堆栈). 用来再次抛出异常.

分享到:
评论

相关推荐

    erlang文献及资料汇总

    erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 Erlang 程序:陷阱和对策 硝烟中的Erlang 深入底层: erlang VM基于多核处理器的可伸缩性特征 erlang VM内部数据共享机制 erlang ...

    erlang 学习笔记1

    4. **异常处理**:Erlang使用`try...catch...throw`语句来处理错误,异常可以被显式抛出,也可以由运行时系统隐式抛出。 5. ** OTP(Open Telecom Platform)**:OTP是Erlang生态系统的核心,提供了一套用于构建...

    erlang 笔记

    ### Erlang程序设计知识点概述 #### 1. Erlang基础语法与函数定义 ...Erlang是一门非常强大且灵活的语言,尤其适合处理并发和分布式系统。通过掌握这些基本概念和高级特性,可以有效地利用Erlang解决实际问题。

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建...通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    erlang_版本24.3.4.4

    - **错误处理**:Erlang采用异常处理机制,鼓励编写无副作用的纯函数,有助于编写容错性强的代码。 - **模式匹配**:Erlang的模式匹配功能允许在函数定义中使用模式来匹配和解构数据结构,简化了代码编写。 - **...

    xiandiao_erlang_Erlang课后习题_

    错误通常通过抛出异常来处理,而不是通过复杂的错误检查逻辑。 6. **模式匹配**:Erlang的函数调用允许模式匹配,使得解构复杂数据结构变得简单,提高了代码的可读性和可维护性。 课后习题的实践价值: 1. **理解...

    erlang programming

    Erlang提供了异常处理机制和错误恢复策略,这在面对软件错误时显得尤为重要。 5. ** OTP (Open Telecom Platform)**:OTP是Erlang的标准库,包含了一系列的设计原则、库和工具,用于帮助开发者构建高效、可靠和可...

    Erlang趣学指南

    (494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。

    erlang趣学指南

    错误和异常处理也是Erlang编程的一个重要部分。由于Erlang的设计哲学是容错,因此它提供了一套独特的机制来处理程序中可能出现的错误。 Erlang还提供了多种常用数据结构,比如元组、列表、字典、集合等,这些数据...

    erlang25.0 windows版本

    - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...

    erlang压缩包.rar

    - **错误处理**:Erlang的异常处理通过`try...catch...after`语句实现,允许优雅地处理错误情况。 了解了这些基础知识后,你可以开始编写Erlang程序,构建自己的并发应用,体验Erlang带来的高效和可靠性。记得在...

    读书笔记:ErlangOTP设计原则中文文档.zip

    读书笔记:ErlangOTP设计原则中文文档

    erlang9.rar

    Erlang的强大并发处理能力和内置的分布式特性使得RabbitMQ成为处理大量并发消息的理想选择。在安装Erlang后,可以通过RabbitMQ的官方网站下载相应版本的安装包,或者从第三方源如CSDN获取,然后按照同样的方式安装。...

    Erlang_CNode用户指

    5. **错误处理和调试**:讨论在CNode中处理Erlang错误和异常的方法,以及如何利用Erlang的调试工具来排查问题。 6. **性能优化**:提供关于如何最大限度地提高CNode与Erlang节点之间通信效率的提示和最佳实践。 7....

    Erlang游戏程序学习完整PDF手册

    - **错误处理和调试**:讨论Erlang的错误处理策略、异常处理和调试工具。 - ** OTP(开放电信平台)**:OTP是Erlang的标准库,包含了一系列设计模式和库,用于构建可靠和可扩展的应用,特别适合游戏服务器架构。 -...

    erlang资源

    3. **错误处理与容错**:Erlang推崇“let it crash”哲学,鼓励程序在遇到错误时快速失败并重启,而不是尝试修复。书里可能会讨论如何构建健壮的系统,利用Erlang的故障隔离特性。 4. **分布式编程**:Erlang进程...

    Erlang官网下载过慢

    在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ,一个基于Erlang开发的消息队列系统,是实现异步通信的关键组件。 标题中提到的“Erlang官网...

    Erlang23_3.zip

    Erlang采用actor模型,每个进程(在Erlang中称为进程,而非操作系统级的进程)都是独立的,通过消息传递进行通信,这种设计使得系统在处理大量并发任务时表现出色。 在"Erlang23_3"这个压缩包中,我们可以推测这...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    erlang程序设计相关例子程序

    4. **try_test.beam** - 这可能是用于测试异常处理的代码,Erlang使用`try...catch...finally`结构来捕获和处理异常,这在编写健壮的系统时非常关键。 5. **area_server_final.beam** - 这可能是一个服务器实现,...

Global site tag (gtag.js) - Google Analytics