@Override
    protected Traverser.Admin<S> processNextStart() {
        while (true) {
            try {
                final Traverser.Admin<S> traverser = this.starts.next();
                if (this.filter(traverser))
                    return traverser;
            } catch (GremlinTypeErrorException ex) {
                if (this instanceof BinaryReductionStep || getTraversal().isRoot() || !(getTraversal().getParent() instanceof FilterStep)) {
                    /*
                     * Either we are at a known reduction point (TraversalFilterStep, WhereTraversalStep), we
                     * are at the top level of the query, or our parent query is not a FilterStep and thus cannot handle
                     * a GremlinTypeErrorException. In any of these cases we do a binary reduction from
                     * ERROR -> FALSE and filter the solution quietly.
                     */
                } else {
                    // not a ternary -> binary reducer, pass the ERROR on
                    throw ex;
                }
            }
        }
    }
@author Marko A. Rodriguez (http://markorodriguez.com)
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java