循序渐进 · 教学 · 函数(十九)

面向用户的错误(UserFacingError)

函数在 Workshop 或动作里运行时,抛普通异常用户看不懂。用 UserFacingError 可以把一句人话直接显示给用户。

全部目录 ← 上一篇 面向用户的错误(UserFacingError) 下一篇 →
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/functions/user-facing-error/
原始标题:Language-agnostic features > User-facing errors

先记住这几条

① 普通异常对用户是黑盒
用户只会看到无意义的报错,不知道该怎么改。
② UserFacingError 带人话消息
抛这个错误,消息会原样展示给终端用户。
③ 三种语言写法一致
TS v1、TS v2、Python 都是 throw/raise 一个 UserFacingError。
④ 用途:引导用户自助修正
好的错误文案能直接告诉用户「你哪里填错了」。
0

写在前面

当函数在平台的其他地方(比如 Workshop 或动作)运行时,你可能希望抛出一个带有详细说明的错误。做法是抛出 UserFacingError。例如:

import { Function, UserFacingError } from "@foundry/functions-api";
import { Employee } from "@foundry/ontology-api";

export class MyFunctions {
    @Function()
    public async searchExactlyFiveEmployees(employees: Employee[]): Proimse<string> {
        if (employees.length != 5) {
            throw new UserFacingError(`请传入正好 5 名员工。实际收到 ${employees.length} 名。`);
        }

        // 搜索员工
    }
}
import { Osdk } from "@osdk/client";
import { Employee } from "@ontology/sdk";
import { UserFacingError } from "@osdk/functions";

export default async function searchExactlyFiveEmployees(employees: Array<Osdk.Instance<Employee>>): Promise<string> {
    if (employees.length != 5) {
        throw new UserFacingError(`请传入正好 5 名员工。实际收到 ${employees.length} 名。`);
    }

    // 搜索员工
}
from functions.api import function, UserFacingError
from ontology_sdk import FoundryClient
from ontology_sdk.ontology.objects import Aircraft

@function()
def search_exactly_five_employees(
    employees: list[Aircraft]
) -> str:
    if not len(aircraft) == 5:
        raise UserFacingError(f"请传入正好 5 名员工。实际收到 ${len(aircraft)} 名。")

    # 搜索员工

如果把它作为函数动作在一个 Workshop 应用里运行,并且传入的员工数量不对,用户会看到下面这个错误:

函数抛出的面向用户错误提示
函数抛出的面向用户错误提示

当一个用在函数导出里的函数抛出 UserFacingError 时,导出失败的提示条会显示这条错误信息。

一句详细的面向用户错误信息,能帮用户自己定位并解决问题。

延伸阅读 · 相关页面

按主题横向跳转,不必顺着目录一篇篇读。