ballerina 学习十六 错误&&异常处理
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 学习十六 错误&&异常处理的更多相关文章
- 强化学习(十六) 深度确定性策略梯度(DDPG)
在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...
- Python学习第十六篇——异常处理
在实际中,很多时候时候,我们并不能保证我们所写的程序是完美的.比如我们程序的本意是:用户在输入框内输入数字,并进行后续数学运算,即使我们提醒了用户需要输入数字而不是文本,但是有时会无意或者恶意输入字符 ...
- python学习第十八天 --错误&异常处理
这一章节主要讲解python的错误和异常处理 什么是错误和异常?及其区别? 错误: 1.语法错误:代码不符合解释器或者编译器语法. 2.逻辑错误:不完整或者不合法输入或者计算出现问题. 异常:执行 ...
- C++(四十六) — 异常处理机制、标准IO输入输出
1.异常处理机制 一般来说,异常处理就是在程序运行时对异常进行检测和控制.而在C++ 中,使用 try-throw-catch模式进行异常处理的机制. #include<iostream> ...
- Scala学习十六——XML处理
一.本章要点 XML字面量<like>this</like>的类型为NodeSeq 可以在XML字面量中内嵌Scala代码 Node的child属性产出后代节点 Node的at ...
- Java学习十六
学习内容: 1.做毕设 2.Java异常类 3.Java包装类 1.System.exit(1):终止程序运行,终止final执行方法 2.throws抛出异常类型,throw抛出异常对象 用法:th ...
- Java开发学习(十六)----AOP切入点表达式及五种通知类型解析
一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...
- java web 学习十六(JSP指令)
一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...
- MYSQL数据库学习十六 安全性机制
16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...
随机推荐
- 在activity之间传递数据
在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...
- JS正则表达式入门,看这篇就够了
前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...
- pandas 运算
Data frame 和 series 的运算:横列相加减:按照index ,row 的方向直接相加减.frame-series纵列相加减:按照 columns,运用算术函数,相加减. frame.s ...
- python脚本9_打印斐波那契数列
#打印斐波那契数列 f0 = 0 f1 = 1 for n in range(2,101): fn = f1 + f0 if fn <= 100: print(fn) f0 = f1 f1 = ...
- delphi ScriptGate 调用JS
在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还 ...
- poj-3046-dp
Ant Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6829 Accepted: 2514 Desc ...
- linux sed 批量替换字符串
Linux下批量替换多个文件中的字符串的简单方法.用sed命令可以批量替换多个文件中的字符串. 命令如下: sed -i "s/原字符串/新字符串/g" `grep 原字符串 -r ...
- wii 入门之路--fatt
wii 入门之路--fatt system menu:系统界面,开机进入后,显示很多应用,4.1用IOS60. Channel:理解为界面中的软件应用和游戏. IOS:IOS(Input Output ...
- 【Python】什么是闭包
文章转载自:点这里 在 Python 中很多教材都没有提及什么是闭包,但在定义一个 Decorator 时,就已经用到闭包了.如果不理解什么是闭包,则不可能清晰掌握Decorator 装饰器. 要形成 ...
- oracle 修改字符集 修改为ZHS16GBK
oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为ser ...