feder-cr/Jobs_Applier_AI_Agent_AIHawk · error · TypeError

Invalid data for Experience: {e}

Error message

Invalid data for Experience: {e}

What it means

ExperienceDetails (or a nested constructor such as building key_responsibilities/skills_acquired) raised TypeError: wrong argument count/types — e.g. a required kwarg missing, an unexpected kwarg, or a list comprehension receiving a non-iterable like None.

Source

Thrown at src/resume_schemas/resume.py:182

                key_responsibilities = [
                    Responsibility(description=list(resp.values())[0])
                    for resp in exp.get('key_responsibilities', [])
                ]
                skills_acquired = [str(skill) for skill in exp.get('skills_acquired', [])]
                experience = ExperienceDetails(
                    position=exp['position'],
                    company=exp['company'],
                    employment_period=exp['employment_period'],
                    location=exp['location'],
                    industry=exp['industry'],
                    key_responsibilities=key_responsibilities,
                    skills_acquired=skills_acquired
                )
                experience_list.append(experience)
            except KeyError as e:
                raise KeyError(f"Missing field in experience details: {e}") from e
            except TypeError as e:
                raise TypeError(f"Invalid data for Experience: {e}") from e
            except AttributeError as e:
                raise AttributeError(f"AttributeError in Experience: {e}") from e
            except Exception as e:
                raise Exception(f"Unexpected error in Experience processing: {e}") from e
        return experience_list


@dataclass
class Exam:
    name: str
    grade: str

@dataclass
class Responsibility:
    description: str

View on GitHub (pinned to 79155b52fa)

Solutions

  1. Check the TypeError text for the exact argument name.
  2. Normalize list fields: vals = exp.get('key_responsibilities') or []; wrap scalars: [vals] if isinstance(vals, str) else vals.
  3. Add Optional/List defaults to the dataclass fields.
  4. Validate types before constructing ExperienceDetails.

Example fix

// before
key_responsibilities = exp['key_responsibilities']
skills_acquired = exp['skills_acquired']

# after
key_responsibilities = exp.get('key_responsibilities') or []
skills_acquired = exp.get('skills_acquired') or []
Defensive patterns

Strategy: validation

Validate before calling

def as_str_list(v):
    if v is None:
        return []
    if isinstance(v, str):
        return [v]
    return list(v)

key_responsibilities = as_str_list(exp.get('key_responsibilities'))
skills_acquired = as_str_list(exp.get('skills_acquired'))

Type guard

def is_str_list(x: Any) -> TypeGuard[list[str]]:
    return isinstance(x, list) and all(isinstance(i, str) for i in x)

Try / catch

try:
    exp_list = _process_experience_details(data)
except TypeError as e:
    logger.error("experience type mismatch: %s", e)
    raise

Prevention

When it happens

Trigger: exp.get('key_responsibilities') returning None and being iterated; passing a scalar where a List[str] field expects an iterable; missing required positional argument in ExperienceDetails(**kwargs).

Common situations: Extraction output where skills/key_responsibilities are absent (None) instead of empty lists; a single string instead of a list; schema drift after adding fields.

Related errors


AI-assisted analysis of feder-cr/Jobs_Applier_AI_Agent_AIHawk@79155b52fa (2026-08-28). Data as JSON: /api/errors/2b23d14f3c4fb6e5. Report an issue: GitHub.