开发者社区> 问答> 正文

什么是函数计算错误的类型

用户函数在运行后,会产生两种类型的错误:

  • Handled error:用户逻辑主动捕获的错误,并通过 callback 返回
  • Unhandled error:用户逻辑未能捕获的错误,例如模块不存在,超时等等

函数计算系统会将错误信息编码为 json 字符串返回。

Handled Error


当用户捕获错误并通过 callback(err) 返回时,如果参数 err 是 Error 类型的对象,调用栈信息(stack trace)也会被返回。
  1. // User function.
  2. exports.handler = function(event, context, callback) {
  3.     var error = new Error("something is wrong");
  4.     callback(error);
  5. };
  6. // Function response.
  7. {
  8.    "errorMessage": "something is wrong",
  9.    "errorType": "Error",
  10.    "stackTrace": [
  11.        "export.handler (/var/task/index.js.3:16)"
  12.    ]
  13. }

如果 callback 参数是非 Error 类型的对象,调用栈信息将不会被返回。
  1. // User function.
  2. exports.handler = function(event, context, callback) {
  3.     callback("something is wrong");
  4. };
  5. // Function response.
  6. {
  7.    "errorMessage": "something is wrong"
  8. }


Unhandled Error


当用户逻辑未捕获到错误时,函数计算系统会尽可能捕获错误,并返回具体的信息。当遇到系统也无法捕捉的错误,例如用户函数在运行过程中突然崩溃退出,系统会返回一个通用的错误消息。

典型错误场景示例

错误类型场景示例错误消息
Handled通过 callback(err) 返回错误,其中 err 是 error 类型{“errorMessage”: “oops”, “errorType”: “Error”, “stackTrace”: [“exports.handler (/var/task/index.js:5:14)”]}
Handled通过 callback(obj) 返回错误,其中 obj 是非错误类型的对象{“errorMessage”: “oops”}
Unhandled函数依赖的模块并不存在{“errorMessage”: “Cannot find module ‘/code/X.js”}
Unhandled指定的处理函数并不存在{“errorMessage”: “Handler ‘X’ missing on module ‘Y’”}
Unhandled函数执行超时{“errorMessage”: “Task timed out after X seconds”}
Unhandled其他用户程序并处理的错误{“errorMessage”: “Process exited unexpectedly before completing request”}

展开
收起
boxti 2017-10-19 16:09:37 3272 0
0 条回答
写回答
取消 提交回答
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
All in Serverless 阿里云核心产品全面升级 立即下载
AIGC 浪潮之上,森马的 Serverless 实践之旅 立即下载
极氪大数据 Serverless 应用实践 立即下载