ballerina 的error 处理和elxiir 以及rust 比较类似使用模式匹配,但是他的 error lifting 还是比较方便的
同时check 也挺好,异常处理没什么特殊的 throw 以及 throw catch finally

简单例子

  • error-handling
import ballerina/io;
function getAccountBalance(int accountID) returns (int|error) { if (accountID < 100) {
error err = { message: "Account with ID: " + accountID +
" is not found" };
return err;
} else {
return 600;
}
} function main(string… args) {
var r = getAccountBalance(24); match r {
int blnc => {
io:println(blnc);
}
error err => {
io:println("Error occurred: " + err.message);
}
}
}
  • error lifting
import ballerina/io;
type Response {
Status|error status;
};
type Status {
string message;
int code;
};
function main(string… args) {
error e = { message: "response error" };
Response|error firstResponse = e;
int|error statusCode1 = firstResponse!status!code;
io:println("The status code: ", statusCode1); Response|error|() secondResponse = (); int|error|() statusCode2 = secondResponse!status!code;
io:println("The status code: ", statusCode2);
}
  • check
import ballerina/io;
type Person {
string name;
Address? address;
};
type Address {
string street;
string city;
};
function getAddress(Person p) returns (Address|error) {
match (p.address) {
Address add => { return add;}
() => {
error addNotFoundErr = { message: "address not found" };
return addNotFoundErr;
}
}
} function validateAddress(Person person) returns (boolean|error) {
string city = check getAddress(person)!city; io:println(person.name, " has a valid city");
return true;
} function validateAddressAgain(Person person) returns boolean {
string city = check getAddress(person)!city; io:println(person.name, " has a valid city");
return true;
} function main(string… args) {
Person bob = { name: "bob" };
Address address = { street: "1st Avenue", city: "Manhattan" };
bob.address = address;
io:println("validating bob…");
var bobResult1 = validateAddress(bob);
io:println("Bob's result 1:", bobResult1);
boolean bobResult2 = validateAddressAgain(bob);
io:println("Bob's result 2:", bobResult2);
Person tom = { name: "tom" };
io:println("\n", "validating tom…");
var tomResult1 = validateAddress(tom);
io:println("Tom's result 1:", tomResult1);
var tomResult2 = validateAddressAgain(tom);
io:println("Tom's result 2:", tomResult2);
}
  • throw
import ballerina/io;
type Record {
int id;
string name;
};
function readRecord(Record|() value) {
match value {
Record rec => {
io:println("Record ID: ", rec.id, ", value: ", rec.name);
}
(any|()) => {
error err = { message: "Record is null" };
throw err;
}
}
} function main(string… args) {
Record r1 = { id: 1, name: "record1" };
readRecord(r1);
Record|() r2; match r2 {
Record rec => {
io:println("Record: " + rec.name);
}
(any|()) => {
readRecord(r2);
}
} Record r3 = { id: 3, name: "record3" };
readRecord(r3);
}
  • thorw/catch/finally
import ballerina/log;
import ballerina/runtime;
import ballerina/io;
function main(string… args) {
int result;
try {
io:println("Start dividing numbers"); result = divideNumbers(1, 0); } catch (error err) {
io:println("Error occurred: ", err.message);
} finally {
io:println("Finally block executed");
}
} function divideNumbers(int a, int b) returns int {
return a / b;
}

参考资料

https://ballerina.io/learn/by-example/try-catch-finally.html
https://ballerina.io/learn/by-example/throw.html
https://ballerina.io/learn/by-example/check.html
https://ballerina.io/learn/by-example/error-lifting.html
https://ballerina.io/learn/by-example/error-handling.html

 
 
 
 

ballerina 学习十六 错误&&异常处理的更多相关文章

  1. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  2. Python学习第十六篇——异常处理

    在实际中,很多时候时候,我们并不能保证我们所写的程序是完美的.比如我们程序的本意是:用户在输入框内输入数字,并进行后续数学运算,即使我们提醒了用户需要输入数字而不是文本,但是有时会无意或者恶意输入字符 ...

  3. python学习第十八天 --错误&异常处理

    这一章节主要讲解python的错误和异常处理 什么是错误和异常?及其区别? 错误: 1.语法错误:代码不符合解释器或者编译器语法. 2.逻辑错误:不完整或者不合法输入或者计算出现问题.   异常:执行 ...

  4. C++(四十六) — 异常处理机制、标准IO输入输出

    1.异常处理机制 一般来说,异常处理就是在程序运行时对异常进行检测和控制.而在C++ 中,使用 try-throw-catch模式进行异常处理的机制. #include<iostream> ...

  5. Scala学习十六——XML处理

    一.本章要点 XML字面量<like>this</like>的类型为NodeSeq 可以在XML字面量中内嵌Scala代码 Node的child属性产出后代节点 Node的at ...

  6. Java学习十六

    学习内容: 1.做毕设 2.Java异常类 3.Java包装类 1.System.exit(1):终止程序运行,终止final执行方法 2.throws抛出异常类型,throw抛出异常对象 用法:th ...

  7. Java开发学习(十六)----AOP切入点表达式及五种通知类型解析

    一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...

  8. java web 学习十六(JSP指令)

    一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...

  9. MYSQL数据库学习十六 安全性机制

    16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...

随机推荐

  1. exit()子程序终止函数与return()函数的差别

    在main函数中我们通常使用return (0);这样的方式返回一个值. 但这是限定在非void情况下的也就是void main()这样的形式. exit()通常是用在子程序中用来终结程序用的,使用后 ...

  2. js从数组中随机获取n个不重复的数据

    做云课堂的作业时遇到一要求,实现刷新页面时显示不同数据,(数组中20个据,页面加载10个).思路就是从0-19中随机生成10个不同的数,让数组取下标输出数据. 下面是在num的范围内生成n个不重复的数 ...

  3. JavaScript数字和字符串转换示例

    http://www.jb51.net/article/48465.htm 1. 数字转换为字符串 a. 要把一个数字转换为字符串,只要给它添加一个空的字符串即可: 复制代码代码如下: var n = ...

  4. 【zznu-夏季队内积分赛3-F】学无止境

    题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“ACM程序设计竞赛是一个团体项目.宝儿姐作为其中优秀的一份子,每天好好学习天天向上.曾经宝儿姐给自己定了一个计划,刷穿bzoj.于 ...

  5. mysqldump 使用方法

    1.仅导出数据: mysqldump -t -uroot -proot pgenius RES_COM_PFT_FCST>RES_COM_PFT_FCST.sql 2.有条的导出数据: mysq ...

  6. Python3安装(二)

    因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...

  7. Mysql双机热备--预备知识

    1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器 ...

  8. CSS字幕滚动 !!!

    marquee的基本语法:<marquee> … </marquee>,与大多数HTML语法元素一样,它也是成双出现的,被修饰对象就放在起始符和终止符之间.而且它自己可以实现鼠 ...

  9. [AirFlow]AirFlow使用指南三 第一个DAG示例

    经过前两篇文章的简单介绍之后,我们安装了自己的AirFlow以及简单了解了DAG的定义文件.现在我们要实现自己的一个DAG. 1. 启动Web服务器 使用如下命令启用: airflow webserv ...

  10. Deep Reinforcement Learning 基础知识(DQN方面)

    Introduction 深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算 ...