@@ -445,6 +445,12 @@ def with_column(self, name: str, expr: Expr) -> DataFrame:
445445 Returns:
446446 DataFrame with the new column.
447447 """
448+ if not isinstance (expr , Expr ):
449+ msg = (
450+ f"Expected Expr, got { type (expr ).__name__ } . "
451+ "Use col() or lit() to construct expressions."
452+ )
453+ raise TypeError (msg )
448454 return DataFrame (self .df .with_column (name , expr .expr ))
449455
450456 def with_columns (
@@ -479,11 +485,28 @@ def _simplify_expression(
479485 if isinstance (expr , Expr ):
480486 expr_list .append (expr .expr )
481487 elif isinstance (expr , Iterable ):
482- expr_list .extend (inner_expr .expr for inner_expr in expr )
488+ for inner_expr in expr :
489+ if not isinstance (inner_expr , Expr ):
490+ msg = (
491+ f"Expected Expr, got { type (inner_expr ).__name__ } . "
492+ "Use col() or lit() to construct expressions."
493+ )
494+ raise TypeError (msg )
495+ expr_list .append (inner_expr .expr )
483496 else :
484- raise NotImplementedError
497+ msg = (
498+ f"Expected Expr, got { type (expr ).__name__ } . "
499+ "Use col() or lit() to construct expressions."
500+ )
501+ raise TypeError (msg )
485502 if named_exprs :
486503 for alias , expr in named_exprs .items ():
504+ if not isinstance (expr , Expr ):
505+ msg = (
506+ f"Expected Expr, got { type (expr ).__name__ } . "
507+ "Use col() or lit() to construct expressions."
508+ )
509+ raise TypeError (msg )
487510 expr_list .append (expr .alias (alias ).expr )
488511 return expr_list
489512
@@ -528,7 +551,16 @@ def aggregate(
528551 group_by_exprs = [
529552 Expr .column (e ).expr if isinstance (e , str ) else e .expr for e in group_by_list
530553 ]
531- aggs_exprs = [e .expr for e in aggs_list ]
554+
555+ aggs_exprs : list [expr_internal .Expr ] = []
556+ for agg in aggs_list :
557+ if not isinstance (agg , Expr ):
558+ msg = (
559+ f"Expected Expr, got { type (agg ).__name__ } . "
560+ "Use col() or lit() to construct expressions."
561+ )
562+ raise TypeError (msg )
563+ aggs_exprs .append (agg .expr )
532564 return DataFrame (self .df .aggregate (group_by_exprs , aggs_exprs ))
533565
534566 def sort (self , * exprs : Expr | SortExpr | str ) -> DataFrame :
@@ -770,7 +802,15 @@ def join_on(
770802 Returns:
771803 DataFrame after join.
772804 """
773- exprs = [expr .expr for expr in on_exprs ]
805+ exprs = []
806+ for expr in on_exprs :
807+ if not isinstance (expr , Expr ):
808+ msg = (
809+ f"Expected Expr, got { type (expr ).__name__ } . "
810+ "Use col() or lit() to construct expressions."
811+ )
812+ raise TypeError (msg )
813+ exprs .append (expr .expr )
774814 return DataFrame (self .df .join_on (right .df , exprs , how ))
775815
776816 def explain (self , verbose : bool = False , analyze : bool = False ) -> None :
0 commit comments