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”字 ... 
随机推荐
- VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
			VS2017中MVC项目中,右键新建控制器时,提示 未能加载文件或程序集“Dapper.Contrib, Version=1.50.0.0, Culture=neutral, PublicKeyTok ... 
- vim编程技巧
			1, :E 浏览目录 如果你要改变当前浏览的目录,或是查看当前浏览的目录,你可以使用和shell一样的命令: :cd <dir> – 改变当前目录 :pwd - 查看当前目录 2, :l ... 
- Codeforces Round #423
			这一次又崩了,最后只a了一题(还是被hack后才发现的错误) 第一题水题,多用一个数保存2-1后的数,注意先用2的桌子,再用这个 #include<map> #include<set ... 
- 对一致性Hash算法,Java代码实现的深入研究(转)
			转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ... 
- Prism 4 文档 ---第7章 组成用户界面
			一个应用程序的用户界面(UI)可以通用以下几种模式之一来构建: 窗体所需要所有的控件都包含在一个单独的XAML文件中,在设计时组合这个窗体. 窗体的逻辑区域被分割到单独的部分中,通常指哟过户控件.这些 ... 
- bat文件执行cmd命令    进入文件夹不退出
			@echo offe:cd E:\ChanJoy-ChangJianBao\前端部分\chanjoy\ChanjoyWebfontgulp watchcmd /k 
- APUE学习笔记——6.10 时间与时间例程 time_t
			Unix提供的最基本的时间服务室日历时间(纪元时间),也就是计算1970年1月1日0时0分0秒到当前的秒数.该秒数用time_t表示. typedef long time_t; /* 时 ... 
- 关于block和inline元素的float
			CSS float 浮动属性 本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录 1. 页面布局方式:介绍文档流.浮动层以及float属性. 2. float:left :介绍float为 l ... 
- 【跟着stackoverflow学Pandas】Delete column from pandas DataFrame-删除列
			最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ... 
- Android深入理解JNI(二)类型转换、方法签名和JNIEnv
			相关文章 Android深入理解JNI系列 前言 上一篇文章介绍了JNI的基本原理和注册,这一篇接着带领大家来学习JNI的数据类型转换.方法签名和JNIEnv. 1.数据类型的转换 首先给出上一篇文章 ... 
