You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars中是否有惯用的报错抛出方式?数据处理需精准错误提示

在Polars中触发明确的数据校验错误提示

要在数据不满足条件时抛出明确错误而非返回null,可以通过先校验数据合法性,再执行转换的原生方式实现,无需用UDF绕路:

步骤1:定义校验条件并筛选异常行

先把不符合匹配规则的行筛选出来,拿到具体的异常数据后再抛出带详情的错误:

import polars as pl

lf = pl.LazyFrame(
    {
        "first_and_middle_name": ["mister banana", "yoda the jedi", "not gonna"],
        "middle_and_last_name": ["banana muffin", "jedi master", "work at all"],
    }
)

# 定义拆分和匹配条件
split_first_name = pl.col("first_and_middle_name").str.split(" ").list
split_last_name = pl.col("middle_and_last_name").str.split(" ").list
match_condition = split_first_name.last() == split_last_name.first()

# 筛选出不满足条件的行
invalid_rows = lf.filter(~match_condition).collect()

# 如果存在异常行,抛出带详情的错误
if not invalid_rows.is_empty():
    error_msg = f"发现{len(invalid_rows)}行数据不匹配规则:\n{invalid_rows}"
    raise ValueError(error_msg)

# 确认数据合法后执行转换
result = lf.with_columns(
    (pl.col("first_and_middle_name") + " " + split_last_name.slice(1).list.join(" "))
    .alias("full_name")
).collect()

print(result)

步骤2:错误信息说明

运行上述代码后,会直接抛出包含异常行详情的错误:

ValueError: 发现1行数据不匹配规则:
shape: (1, 2)
┌──────────────────────┬─────────────────────┐
│ first_and_middle_name ┆ middle_and_last_name │
│ ---                  ┆ ---                 │
│ str                  ┆ str                 │
╞══════════════════════╪═════════════════════╡
│ not gonna            ┆ work at all         │
└──────────────────────┴─────────────────────┘

这种方式既保留了Polars的矢量运算性能,又能精准定位异常数据的具体内容,比UDF更高效直接。

内容的提问来源于stack exchange,提问作者nadavge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:25:01