pathwaycom/pathway · error · ValueError
Received `how` argument but was not expecting any. Consider
Error message
Received `how` argument but was not expecting any. Consider using a generic join method that handles `how` to decide on a type of a join to be used.
What it means
Pathway splits join APIs into specific methods (join, join_left, join_right, join_outer, join_any, ...) that do not take a 'how' parameter, and generic methods (join_by / the generic entry points) that do. This handler runs with allow_how=False, so passing how=... to a specific join method raises this ValueError pointing you to the generic method. The check happens in the shared kwargs handler used by Table join methods.
Source
Thrown at python/pathway/internals/arg_handlers.py:79
raise ValueError(
"Table.windowby() received extra kwargs.\n"
+ "You probably want to use Table.windowby(...).reduce(**kwargs) to compute output columns."
)
return (self, time_expr), {
"window": window,
"behavior": behavior,
"instance": instance,
}
def join_kwargs_handler(*, allow_how: bool, allow_id: bool):
def handler(self, other, *on, **kwargs):
processed_kwargs = {}
if "how" in kwargs:
how = kwargs.pop("how")
processed_kwargs["how"] = how
if not allow_how:
raise ValueError(
"Received `how` argument but was not expecting any.\n"
+ "Consider using a generic join method that handles `how` "
+ "to decide on a type of a join to be used."
)
elif isinstance(how, JoinMode):
pass
elif isinstance(how, str):
raise ValueError(
"Received `how` argument of join that is a string.\n"
+ "You probably want to use one of "
+ "JoinMode.INNER, JoinMode.LEFT, JoinMode.RIGHT or JoinMode.OUTER values."
)
else:
raise ValueError(
"How argument of join should be one of "
+ "JoinMode.INNER, JoinMode.LEFT, JoinMode.RIGHT or JoinMode.OUTER values."
)
View on GitHub (pinned to fa2f74a464)
Solutions
- Drop the how kwarg from the specific method: t.join_left(t2, t1.k == t2.k).
- Or switch to the generic form that accepts how: t.join(t2, t1.k == t2.k, how=pw.JoinMode.LEFT) via the generic entry point.
- Pick the method matching the intended mode: join_inner/join_left/join_right/join_outer.
Example fix
# before t1.join_left(t2, t1.k == t2.k, how="left") # after t1.join_left(t2, t1.k == t2.k)
Defensive patterns
Strategy: validation
Validate before calling
def join_left_checked(t1, t2, *on, **kwargs):
if "how" in kwargs:
raise TypeError("join_left does not accept how; the method already fixes the mode")
return t1.join_left(t2, *on, **kwargs) Prevention
- Specific join methods (join_inner/join_left/...) encode the mode in their name — never pass how.
- If you want config-driven modes, use the generic join with a JoinMode value.
When it happens
Trigger: t1.join_left(t2, t1.k == t2.k, how='left'); t1.join_inner(t2, how=pw.JoinMode.LEFT); any specific-arity join call that includes how.
Common situations: Copy-pasting from generic join examples into specific methods; pandas/sql habits where every join takes how=; refactoring from join(...how=...) to join_left and leaving the kwarg behind.
Related errors
- Received `id` argument but was not expecting any. Not every
- The id argument of a join has to be a ColumnReference.
- Received `how` argument of join that is a string. You probab
- How argument of join should be one of JoinMode.INNER, JoinMo
- Received `id` argument of join that is a string. Did you mea
AI-assisted analysis of pathwaycom/pathway@fa2f74a464 (2026-08-15).
Data as JSON: /api/errors/a185f44f537f7106.
Report an issue: GitHub.