{"record":{"id":"df748265b13a9bbc","repo":"feder-cr/Jobs_Applier_AI_Agent_AIHawk","slug":"invalid-data-for-education-e","errorCode":null,"errorMessage":"Invalid data for Education: {e}","messagePattern":"Invalid data for Education: (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"src/resume_schemas/resume.py","lineNumber":153,"sourceCode":"    def _process_education_details(self, data: List[Dict[str, Any]]) -> List[EducationDetails]:\n        education_list = []\n        for edu in data:\n            try:\n                exams = [Exam(name=k, grade=v) for k, v in edu.get('exam', {}).items()]\n                education = EducationDetails(\n                    education_level=edu.get('education_level'),\n                    institution=edu.get('institution'),\n                    field_of_study=edu.get('field_of_study'),\n                    final_evaluation_grade=edu.get('final_evaluation_grade'),\n                    start_date=edu.get('start_date'),\n                    year_of_completion=edu.get('year_of_completion'),\n                    exam=exams\n                )\n                education_list.append(education)\n            except KeyError as e:\n                raise KeyError(f\"Missing field in education details: {e}\") from e\n            except TypeError as e:\n                raise TypeError(f\"Invalid data for Education: {e}\") from e\n            except AttributeError as e:\n                raise AttributeError(f\"AttributeError in Education: {e}\") from e\n            except Exception as e:\n                raise Exception(f\"Unexpected error in Education processing: {e}\") from e\n        return education_list\n\n    def _process_experience_details(self, data: List[Dict[str, Any]]) -> List[ExperienceDetails]:\n        experience_list = []\n        for exp in data:\n            try:\n                key_responsibilities = [\n                    Responsibility(description=list(resp.values())[0])\n                    for resp in exp.get('key_responsibilities', [])\n                ]\n                skills_acquired = [str(skill) for skill in exp.get('skills_acquired', [])]\n                experience = ExperienceDetails(\n                    position=exp['position'],\n                    company=exp['company'],","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/feder-cr/Jobs_Applier_AI_Agent_AIHawk/blob/79155b52faccfbd19b834680af285eac70dd2df4/src/resume_schemas/resume.py#L135-L171","documentation":"EducationDetails construction failed with a TypeError — wrong-typed or unexpected keyword arguments. Common causes: exam entries built via Exam(name=k, grade=v) where v isn't a str, a required field missing from the kwargs (Python reports missing arguments as TypeError), or extra keys passed through.","triggerScenarios":"edu.get('exam', {}) returning a non-dict (e.g. a list) so .items() yields malformed k/v; EducationDetails called without a required argument because a .get() returned None where the field has no default.","commonSituations":"LLM-generated resumes where 'exam' is sometimes a list of objects instead of a {name: grade} map; schema drift adding new required fields.","solutions":["Check the TypeError text: 'missing 1 required positional argument' vs 'unexpected keyword argument' pinpoints the field.","Normalize the exam structure before the loop: if isinstance(edu.get('exam'), list): convert to a dict.","Add defaults (Optional[...] = None) to non-critical EducationDetails fields.","Validate types of values (grade must be str/int) before constructing Exam."],"exampleFix":"// before\nexams = [Exam(name=k, grade=v) for k, v in edu.get('exam', {}).items()]\n\n# after\nexam_data = edu.get('exam') or {}\nif not isinstance(exam_data, dict):\n    exam_data = {e['name']: e['grade'] for e in exam_data}\nexams = [Exam(name=k, grade=str(v)) for k, v in exam_data.items()]","handlingStrategy":"type-guard","validationCode":"exam = edu.get('exam') or {}\nif not isinstance(exam, dict):\n    if isinstance(exam, list):\n        exam = {item['name']: item['grade'] for item in exam if isinstance(item, dict)}\n    else:\n        exam = {}","typeGuard":"def is_exam_map(x: Any) -> TypeGuard[dict]:\n    return isinstance(x, dict) and all(isinstance(v, (str, int, float)) for v in x.values())","tryCatchPattern":"try:\n    edu_list = _process_education_details(data)\nexcept TypeError as e:\n    logger.error(\"education type mismatch: %s\", e)\n    raise","preventionTips":["Normalize 'exam' shape (dict vs list) before iterating .items()","Coerce grades to str when building Exam","Prefer .get() over [] for optional fields"],"tags":["typeerror","dataclass","python"],"backgroundTag":"dataclass-construction-typeerror","analyzedSha":"79155b52faccfbd19b834680af285eac70dd2df4","analyzedAt":"2026-08-28T14:10:26.659Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}