异常处理
GS中的报错就是异常,比如我们手动调用一个error("err occurs")抛出一个错 误,或者assert(false)产生断言,或者出现一个除0的算数运算,底层都会报错来触发异常,如果错误不去捕获,会打断我们的运行的逻辑,一路向上传递,直到以第一个捕获的地方,或者到整个协程的入口为止
GS中有两种捕获异常的方式
catch
直接使用catch是最简单的捕获但是不处理的方式,支持两种方式:
catch(表达式)
;catch { 代码块 }
// 捕获error抛出的错误
catch(error("xxx"));
// 捕获代码块中的错误
catch {
int i = 100;
int j = i * i;
int k = 0;
write(j / k); // 触发除0异常
}
try catch
try catch的方式和C++类似,我们可以处理捕获的异常
// 不指明ex的简单捕获
try
{
error("hello");
}
catch
{
printf("此处处理异常");
}
// 指明ex,可以获得错误信息
try
{
error("hello");
}
catch(ex)
{
printf("异常=%O\n", ex);
}