diff --git a/api/core/workflow/nodes/code/code_node.py b/api/core/workflow/nodes/code/code_node.py index bd713e49ea..f52d1766e8 100644 --- a/api/core/workflow/nodes/code/code_node.py +++ b/api/core/workflow/nodes/code/code_node.py @@ -256,7 +256,7 @@ class CodeNode(Node): elif output_config.type == SegmentType.NUMBER: # check if number available value = result.get(output_name) - if not isinstance(value, (int, float, None)): + if value is not None and not isinstance(value, (int, float)): raise OutputValidationError( f"Output {prefix}{dot}{output_name} is not a number," f" got {type(result.get(output_name))} instead." @@ -271,9 +271,11 @@ class CodeNode(Node): elif output_config.type == SegmentType.STRING: # check if string available - value = result.get("output_name") + value = result.get(output_name) if value is not None and not isinstance(value, str): - raise OutputValidationError(f"Output value `{value}` is not string") + raise OutputValidationError( + f"Output {prefix}{dot}{output_name} must be a string, got {type(value).__name__} instead" + ) transformed_result[output_name] = self._check_string( value=value, variable=f"{prefix}{dot}{output_name}", @@ -388,7 +390,7 @@ class CodeNode(Node): ) else: for i, inner_value in enumerate(value): - if not isinstance(inner_value, bool | None): + if inner_value is not None and not isinstance(inner_value, bool): raise OutputValidationError( f"Output {prefix}{dot}{output_name}[{i}] is not a boolean," f" got {type(inner_value)} instead." diff --git a/api/tests/integration_tests/workflow/nodes/test_code.py b/api/tests/integration_tests/workflow/nodes/test_code.py index fe46ed7658..d6e230feed 100644 --- a/api/tests/integration_tests/workflow/nodes/test_code.py +++ b/api/tests/integration_tests/workflow/nodes/test_code.py @@ -162,7 +162,7 @@ def test_execute_code_output_validator(setup_code_executor_mock): result = node._run() assert isinstance(result, NodeRunResult) assert result.status == WorkflowNodeExecutionStatus.FAILED - assert result.error == "Output variable `result` must be a string" + assert result.error == "Output result must be a string, got int instead" def test_execute_code_output_validator_depth():