【问题标题】:how do I skip the error in kdb when running a function?运行函数时如何跳过 kdb 中的错误?
【发布时间】:2021-12-03 21:08:12
【问题描述】:
func:raze {select compTypeOrigin from .get.order[2021.10.01;string x]}

list:(``abc`def`ggh``eef)

当我运行这个函数时它可以工作

raze {select compTypeOrigin from .get.order[2021.10.01;string x]} `abc

但是当它为空(`)时我得到了类型错误,可能是由于函数.get.order

我尝试使用受保护的评估来运行该函数

@[func;each list[0 + til 6];show]

但它不起作用 如何跳过错误?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    我认为您需要将每个 (') 带到受保护的评估之外。试试这个语法:

    q)f:{x*x}
    q)list:(1;`a;3)
    q)@'[f;list;{x}]
    1
    "type"
    9
    

    【讨论】:

    • 打败我......
    【解决方案2】:

    func 目前不是一个函数,而是一个混合列表。 raze 应放在函数内部,使其成为函数。

    错误捕获仅在函数执行期间捕获错误。在您的情况下,在each list[0 + til 6] 期间设置参数期间会预先引发错误。引发错误的原因是 each 需要两个参数(一个运算符和参数)并且只提供一个。

    / func is currently not a function, but a mixed list
    q)type func
    0h
    / put the raze inside the lambda
    func:{raze select compTypeOrigin from .get.order[2021.10.01;string x]}
    / type now 100h (lambda)
    q)type func
    100h
    / move the each outside
    @[func;;show] each list[0 + til 6]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多