If parseLog just returned an error upon failure we would have to same problem as exceptions do, as explained in section 1. So we have to make parseLog return two lists: one of entries, and one of errors. We would then have to search through the error list fixing and reparsing each error. In Python this would be something like,
def parseLogInteractively(file):
return parseLinesInteractively(file.readLines())
def parseLinesInteractively(lines):
entries, errors = parseLines(lines)
if errors:
entries += parseLinesInteractively(askToFixEntry(e.text) for e in errors)
return entries
Again we lose the ability to abstract the function 'parseLog'. And I don't know about you, but this looks far worse to me than "resume FixEntry" in terms of exposing implementation details.