kdb运行函数时遇到报错如何跳过错误继续执行?
kdb跳过参数错误保证程序执行的解决方案
你原来的受保护求值写法不生效,核心是用法不符合kdb的@运算符规则,且错误捕获的位置不对,可按以下两种方案处理:
方案1:单参数调用加受保护求值(兼容所有未知错误场景)
把受保护求值封装在单个参数的处理逻辑中,出错时返回空列表兜底,避免中断执行:
// 定义单个参数处理逻辑,出错返回空列表 singleProcess: {@[{select compTypeOrigin from .get.order[2021.10.01;string x]}; x; {()}] } // 遍历所有参数后合并结果 result: raze singleProcess each list
说明:@运算符的第三个参数为错误兜底回调,这里直接返回空列表,遇到空符号触发异常时会自动返回空,最后raze会自动忽略空结果不影响整体返回。
方案2:提前过滤错误参数(性能最优,仅适用空符号是唯一错误源的场景)
如果已经确定只有空符号``` ` ``会触发报错,可以直接提前过滤掉无效参数再调用:
// 过滤掉所有空符号后调用原有函数 result: raze func each list where list <> `
原写法无效的原因
- 你使用的
@[func;each list[0 + til 6];show]是将整个参数列表作为入参传给func,而非逐个元素应用,只要有一个参数报错就会触发全局异常 - 原func外层的
raze没有做错误兼容,内部调用抛出异常时会直接中断执行
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

