José Agretti
07/21/2025, 4:40 PMMarvin
07/21/2025, 4:40 PMMarvin
07/21/2025, 4:41 PMpython
from prefect import flow, task
@task
def task_that_might_fail():
# Your task logic here
raise Exception("Task failed!")
@flow(return_state=True)
def my_flow():
task_state = task_that_might_fail()
if task_state.is_failed():
raise Exception(f"Flow failed due to task failure: {task_state.message}")
return "Flow completed successfully"
2. Using Exception Handling:
python
from prefect import flow, task
@task
def task_that_might_fail():
# Your task logic here
raise Exception("Task failed!")
@flow
def my_flow():
try:
result = task_that_might_fail()
except Exception as e:
# This will mark the flow as failed
raise Exception(f"Flow failed due to task error: {str(e)}")
3. Checking Multiple Task States:
python
from prefect import flow, task
@task
def task1():
# Task logic
pass
@task
def task2():
# Task logic
pass
@flow(return_state=True)
def my_flow():
task1_state = task1()
task2_state = task2()
# Check if any task failed
failed_tasks = [
task_name for task_name, state in [
("task1", task1_state),
("task2", task2_state)
] if state.is_failed()
]
if failed_tasks:
raise Exception(f"Flow failed due to failed tasks: {', '.join(failed_tasks)}")
Key points to remember:
- Using return_state=True
in the flow decorator allows you to access task states directly
- Raising an exception within the flow will cause it to fail
- You can use state.is_failed()
to check task states
- The flow will automatically fail if any unhandled exceptions occur in tasks
The reason your flow might be showing as completed despite task failures could be because:
1. The task failures are being caught and handled without propagating the failure
2. The flow isn't explicitly checking task states
3. The exceptions aren't being raised to the flow level
Choose the approach that best fits your use case. If you need more specific guidance based on your flow structure, feel free to share more details about your flow and tasks.
You can find more information about states and failure handling in the Prefect documentation.