stanfordnlp/CoreNLP · error · NoSuchElementException
CrossValidatorIterator exhausted.
Error message
CrossValidatorIterator exhausted.
What it means
NoSuchElementException thrown by CrossValidationIterator.next() when next() is called after all kFold folds have already been returned (iter == kFold). It indicates the caller ignored hasNext() and over-iterated the fold sequence.
Solutions
- Guard next() calls with hasNext()
- Loop with `while (iterator.hasNext())` instead of a fixed count larger than kFold
- Re-create the CrossValidator if more passes over folds are needed
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at src/edu/stanford/nlp/classify/CrossValidator.java:75 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of stanfordnlp/CoreNLP@1b7edd19c4 (2026-09-10).
Data as JSON: /api/errors/36ec35623b978066.
Report an issue: GitHub.
Appendix: source
Thrown at src/edu/stanford/nlp/classify/CrossValidator.java:75
return sum / kFold;
}
class CrossValidationIterator implements Iterator<Triple<GeneralDataset<L, F>,GeneralDataset<L, F>,SavedState>> {
private int iter = 0;
@Override
public boolean hasNext() { return iter < kFold; }
@Override
public void remove() {
throw new UnsupportedOperationException("CrossValidationIterator doesn't support remove()");
}
@Override
public Triple<GeneralDataset<L, F>,GeneralDataset<L, F>,SavedState> next() {
if (iter == kFold) throw new NoSuchElementException("CrossValidatorIterator exhausted.");
int start = originalTrainData.size() * iter / kFold;
int end = originalTrainData.size() * (iter + 1) / kFold;
//Logging.logger(this.getClass()).info("##train data size: " + originalTrainData.size() + " start " + start + " end " + end);
Pair<GeneralDataset<L, F>, GeneralDataset<L, F>> split = originalTrainData.split(start, end);
return new Triple<>(split.first(), split.second(), savedStates[iter++]);
}
} // end class CrossValidationIterator
public static class SavedState {
public Object state;
}
public static void main(String[] args) {
Dataset<String, String> d = Dataset.readSVMLightFormat(args[0]);
Iterator<Triple<GeneralDataset<String, String>,GeneralDataset<String, String>,SavedState>> it = (new CrossValidator<>(d)).iterator();View on GitHub (pinned to 1b7edd19c4)