This is an automated email from the ASF dual-hosted git repository.

amoghdesai pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 3bde8382861 Display a more friendly error when invalid branches are 
provided to branch operators (#54273)
3bde8382861 is described below

commit 3bde838286118e99cf8411f8e89c5262e0e7d1fd
Author: Jake Roach <[email protected]>
AuthorDate: Wed Aug 20 02:10:21 2025 -0400

    Display a more friendly error when invalid branches are provided to branch 
operators (#54273)
---
 .../src/airflow/providers/standard/utils/skipmixin.py |  7 +++++--
 .../tests/unit/standard/utils/test_skipmixin.py       | 19 +++++++++++++++----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git 
a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py 
b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index 432b287f3a1..f00bbfcb19d 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -129,14 +129,17 @@ class SkipMixin(LoggingMixin):
         if isinstance(branch_task_ids, str):
             branch_task_id_set = {branch_task_ids}
         elif isinstance(branch_task_ids, Iterable):
+            # Handle the case where invalid values are passed as elements of 
an Iterable
+            # Non-string values are considered invalid elements
             branch_task_id_set = set(branch_task_ids)
             invalid_task_ids_type = {
                 (bti, type(bti).__name__) for bti in branch_task_id_set if not 
isinstance(bti, str)
             }
             if invalid_task_ids_type:
                 raise AirflowException(
-                    f"'branch_task_ids' expected all task IDs are strings. "
-                    f"Invalid tasks found: {invalid_task_ids_type}."
+                    f"Unable to branch to the specified tasks. "
+                    f"The branching function returned invalid 
'branch_task_ids': {invalid_task_ids_type}. "
+                    f"Please check that your function returns an Iterable of 
valid task IDs that exist in your DAG."
                 )
         elif branch_task_ids is None:
             branch_task_id_set = set()
diff --git a/providers/standard/tests/unit/standard/utils/test_skipmixin.py 
b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
index db805f5f2a5..ac66c89d7e2 100644
--- a/providers/standard/tests/unit/standard/utils/test_skipmixin.py
+++ b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
@@ -327,10 +327,21 @@ class TestSkipMixin:
             ti1 = TI(task, run_id=DEFAULT_DAG_RUN_ID, 
dag_version_id=dag_version.id)
         else:
             ti1 = TI(task, run_id=DEFAULT_DAG_RUN_ID)
-        error_message = (
-            r"'branch_task_ids' expected all task IDs are strings. "
-            r"Invalid tasks found: \{\(42, 'int'\)\}\."
-        )
+
+        if AIRFLOW_V_3_0_PLUS:
+            # Improved error message for Airflow 3.0+
+            error_message = (
+                r"Unable to branch to the specified tasks\. "
+                r"The branching function returned invalid 'branch_task_ids': 
\{\(42, 'int'\)\}\. "
+                r"Please check that your function returns an Iterable of valid 
task IDs that exist in your DAG\."
+            )
+        else:
+            # Old error message for Airflow 2.x
+            error_message = (
+                r"'branch_task_ids' expected all task IDs are strings\. "
+                r"Invalid tasks found: \{\(42, 'int'\)\}\."
+            )
+
         with pytest.raises(AirflowException, match=error_message):
             SkipMixin().skip_all_except(ti=ti1, branch_task_ids=["task", 42])
 

Reply via email to