V8嵌入开发(八)

Exceptions 异常 与 错误

异常

如果发生错误, V8 会抛出异常. 比如, 当一个脚本或函数试图读取一个不存在的属性时, 或者一个不是函数的值被当作函数进行调用执行时.

如果一个操作不成功, V8 将返回一个空的 handle. 因此我们应该在代码中检查返回值是否是一个空的 handle, 可以使用 Local 类的公共成员函数 isEmpty() 来检查 handle 是否为空.

我们也可以像以下示例一样 Try Catch 代码中发生的异常:

TryCatch trycatch(isolate);
Local<Value> v = script->Run();
if (v.IsEmpty()) { 
    Local<Value> exception = trycatch.Exception(); 
    String::Utf8Value exception_str(exception); 
    printf("Exception: %s\n", *exception_str); 
    // ... 
} 

如果 value 以一个空 handle 返回, 而你没有 TryCatch 它, 你的程序挂掉, 反之则可以继续执行.

错误

v8::Exception 通过使用消息调用相应的错误对象构造函数来创建新的错误对象。

isolate->ThrowException(v8::Exception::Error(
    v8::String::NewFromUtf8(isolate, "File opening failed")
      .ToLocalChecked()));
v8::TryCatch trycatch(isolate);
 v8::MaybeLocal<v8::Value> v = script->Run(context);
 if (v.IsEmpty()) {
  v8::Local<v8::Value> exception = trycatch.Exception();
  v8::String::Utf8Value exception_str(isolate, exception);
  std::cout << *exception_str << std::endl;
 }