Aider-AI/aider · error · ValueError

Unexpected error parsing patch: {e}

Error message

Unexpected error parsing patch: {e}

What it means

The defensive catch-all in PatchCoder.get_edits: any non-DiffError exception thrown while parsing (i.e. an unexpected bug in _parse_patch_text rather than a grammar violation) is wrapped as ValueError('Unexpected error parsing patch: ...'). It distinguishes 'model produced a bad patch' from 'the parser itself crashed'.

Source

Thrown at aider/coders/patch_coder.py:288

                raise DiffError(f"File referenced in patch not found: {rel_path}")
            except IOError as e:
                raise DiffError(f"Error reading file {rel_path}: {e}")

        try:
            # Parse the patch text using adapted logic
            patch_obj = self._parse_patch_text(lines, start_index, current_files)
            # Convert Patch object actions dict to a list of tuples (path, action)
            # for compatibility with the base Coder's prepare_to_edit method.
            results = []
            for path, action in patch_obj.actions.items():
                results.append((path, action))
            return results
        except DiffError as e:
            # Raise as ValueError for consistency with other coders' error handling
            raise ValueError(f"Error parsing patch content: {e}")
        except Exception as e:
            # Catch unexpected errors during parsing
            raise ValueError(f"Unexpected error parsing patch: {e}")

    def _parse_patch_text(
        self, lines: List[str], start_index: int, current_files: Dict[str, str]
    ) -> Patch:
        """
        Parses patch content lines into a Patch object.
        Adapted from the Parser class in apply_patch.py.
        """
        patch = Patch()
        index = start_index
        fuzz_accumulator = 0

        while index < len(lines):
            line = lines[index]
            norm_line = _norm(line)

            if norm_line == "*** End Patch":
                index += 1

View on GitHub (pinned to 5dc9490bb3)

Solutions

  1. Capture the original exception text after 'Unexpected error parsing patch:' and the triggering patch text.
  2. Search/upgrade the aider issue tracker — parser crashes on valid-ish input are bugs worth reporting with the minimal patch reproducing it.
  3. As a workaround, switch to another edit format (diff/udiff) until the parser handles the case.
  4. Pin/roll back the aider version if the crash appeared right after an upgrade.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    edits = coder.get_edits(reply)
except ValueError as e:
    if str(e).startswith("Unexpected error parsing patch:"):
        save_bug_report(reply, str(e))      # parser crash, not a model grammar error
        edits = coder_with_diff_format.get_edits(reply)  # fallback edit format
    else:
        raise

Prevention

When it happens

Trigger: An exception other than DiffError escapes _parse_patch_text — index errors from malformed nesting, None dereferences on unexpected shapes, type errors from odd content — i.e. parser bugs or unhandled edge cases in the patch grammar.

Common situations: New model output shapes that hit untested parser paths after a model upgrade; aider version regressions in patch parsing; exotic patches mixing markers in unusual orders.

Related errors


AI-assisted analysis of Aider-AI/aider@5dc9490bb3 (2026-08-15). Data as JSON: /api/errors/0dddb46f9e3c29dc. Report an issue: GitHub.