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. 在activity之间传递数据

    在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...

  2. JS正则表达式入门,看这篇就够了

    前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...

  3. pandas 运算

    Data frame 和 series 的运算:横列相加减:按照index ,row 的方向直接相加减.frame-series纵列相加减:按照 columns,运用算术函数,相加减. frame.s ...

  4. python脚本9_打印斐波那契数列

    #打印斐波那契数列 f0 = 0 f1 = 1 for n in range(2,101): fn = f1 + f0 if fn <= 100: print(fn) f0 = f1 f1 = ...

  5. delphi ScriptGate 调用JS

    在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还 ...

  6. poj-3046-dp

    Ant Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6829   Accepted: 2514 Desc ...

  7. linux sed 批量替换字符串

    Linux下批量替换多个文件中的字符串的简单方法.用sed命令可以批量替换多个文件中的字符串. 命令如下: sed -i "s/原字符串/新字符串/g" `grep 原字符串 -r ...

  8. wii 入门之路--fatt

    wii 入门之路--fatt system menu:系统界面,开机进入后,显示很多应用,4.1用IOS60. Channel:理解为界面中的软件应用和游戏. IOS:IOS(Input Output ...

  9. 【Python】什么是闭包

    文章转载自:点这里 在 Python 中很多教材都没有提及什么是闭包,但在定义一个 Decorator 时,就已经用到闭包了.如果不理解什么是闭包,则不可能清晰掌握Decorator 装饰器. 要形成 ...

  10. oracle 修改字符集 修改为ZHS16GBK

    oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为ser ...