mikefarah/yq · error
expected to find 1 number, got %v instead
Error message
expected to find 1 number, got %v instead
What it means
getSliceNumber evaluates one of the index sub-expressions of the slice operator ([start:end]) and requires it to yield exactly one node, because a slice edge must be a single integer. The expression returned %v nodes — either it emitted multiple results (e.g. .[] or a multi-match select) or none at all.
Source
Thrown at pkg/yqlib/operator_slice.go:14
package yqlib
import (
"container/list"
"fmt"
)
func getSliceNumber(d *dataTreeNavigator, context Context, node *CandidateNode, expressionNode *ExpressionNode) (int, error) {
result, err := d.GetMatchingNodes(context.SingleChildContext(node), expressionNode)
if err != nil {
return 0, err
}
if result.MatchingNodes.Len() != 1 {
return 0, fmt.Errorf("expected to find 1 number, got %v instead", result.MatchingNodes.Len())
}
return parseInt(result.MatchingNodes.Front().Value.(*CandidateNode).Value)
}
// clampSliceIndex resolves a possibly-negative slice index against
// length and clamps the result to [0, length].
func clampSliceIndex(index, length int) int {
if index < 0 {
index += length
}
if index < 0 {
return 0
}
if index > length {
return length
}
return index
}View on GitHub (pinned to 8b5af0694b)
Solutions
- Use a single integer literal or expression for each slice bound: .[1:3]
- Replace multi-match expressions with one that yields one number (e.g. (.n // 0))
- Check for null matches: use defaults so the bound always resolves
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pkg/yqlib/operator_slice.go:14 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of mikefarah/yq@8b5af0694b (2026-09-05).
Data as JSON: /api/errors/65eff6d6abf418cb.
Report an issue: GitHub.