CBrother 异常捕获

CBrother运行时出现了异常,会直接将抛出,停止当前线程工作。如果开发者没有主动捕获异常,则会被CBrother解释器最终捕获并输出。

try catch

CBrother通过try catch来主动捕获异常

  1. function main(parm)
  2. {
  3. try
  4. {
  5. print c;
  6. }
  7. catch(e)
  8. {
  9. print e;
  10. }
  11. print "main end!";
  12. }

结果:

  1. NotFindException:can't find 'c'
  2. at main [testtrycatch.cb:7]
  3. main end!

可见错误被捕获后程序继续执行,打印出了main end!

catch中的参数是字符串类型的异常信息。

finally

finally表示无论是否发生异常,finally中的代码都将被执行。

  1. function main(parm)
  2. {
  3. try
  4. {
  5. print 1;
  6. }
  7. catch(e)
  8. {
  9. print e;
  10. }
  11. finally
  12. {
  13. print "in except finally no exception";
  14. }
  15. print "================================";
  16. try
  17. {
  18. print c;
  19. }
  20. catch(e)
  21. {
  22. print e;
  23. }
  24. finally
  25. {
  26. print "in except finally exception";
  27. }
  28. print "main end!";
  29. }

结果:

  1. 1
  2. in except finally no exception
  3. ================================
  4. NotFindException:can't find 'c'
  5. at main [testtrycatch.cb:22]
  6. in except finally exception
  7. main end!

finally中的代码,即便是在return之后也会被执行

  1. function main(parm)
  2. {
  3. try
  4. {
  5. return 1;
  6. }
  7. catch(e)
  8. {
  9. print e;
  10. }
  11. finally
  12. {
  13. print "in except finally no exception";
  14. }
  15. print "main end!";
  16. }

结果:

  1. in except finally no exception

出现异常时

  1. function main(parm)
  2. {
  3. try
  4. {
  5. print c;
  6. }
  7. catch(e)
  8. {
  9. print e;
  10. return 1;
  11. }
  12. finally
  13. {
  14. print "in except finally exception";
  15. }
  16. print "main end!";
  17. }

结果:

  1. NotFindException:can't find 'c'
  2. at main [testtrycatch.cb:7]
  3. in except finally exception

因为return了,main end!不会打印出来,但是finally执行了

捕获到异常时,如果catch或finally中的代码再次出现异常,则无法再次在当前函数捕获,会直接将异常抛到函数调用堆栈的上一层等待处理。