From 19e7273187da8c22cd9c3067990a5887be55db74 Mon Sep 17 00:00:00 2001 From: Nick Crews Date: Sat, 13 Sep 2025 15:55:41 -0600 Subject: [PATCH] docs: improve error message when trying to infer the dtype of Deferreds See https://github.com/ibis-project/ibis/issues/11608#issuecomment-3288872958 --- ibis/expr/datatypes/value.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ibis/expr/datatypes/value.py b/ibis/expr/datatypes/value.py index 30ad6d26411e..809c5d4ad0ce 100644 --- a/ibis/expr/datatypes/value.py +++ b/ibis/expr/datatypes/value.py @@ -10,13 +10,14 @@ from collections.abc import Mapping, Sequence from functools import partial from operator import attrgetter -from typing import Any +from typing import Any, NoReturn import toolz from public import public import ibis.expr.datatypes as dt from ibis.common.collections import frozendict +from ibis.common.deferred import Deferred from ibis.common.dispatch import lazy_singledispatch from ibis.common.exceptions import IbisTypeError, InputTypeError from ibis.common.numeric import normalize_decimal @@ -37,6 +38,16 @@ def infer(value: Any) -> dt.DataType: ) +@infer.register(Deferred) +def infer_deferred(value: Deferred) -> NoReturn: + raise TypeError( + "Cannot infer the type of a Deferred value. " + "You will need to use a bound value instead. " + "For example, if you have `ibis._.my_col + 5`, " + "you will need to replace this with `my_table.my_col + 5`." + ) + + # TODO(kszucs): support NamedTuples and dataclasses instead of OrderedDict # which should trigger infer_map instead @infer.register(collections.OrderedDict)