跳到主要内容
版本:release

异常处理

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);
}