{"record":{"id":"deb5d5fe5070b5d2","repo":"deepfakes/faceswap","slug":"error-serializing-data-for-type-type-data-str","errorCode":null,"errorMessage":"Error serializing data for type {type(data)}: {str(err)}","messagePattern":"Error serializing data for type (.+?): (.+?)","errorType":"exception","errorClass":"FaceswapError","httpStatus":null,"severity":"error","filePath":"lib/serializer.py","lineNumber":142,"sourceCode":"            The data that is to be serialized\n\n        Returns\n        -------\n        data: varies\n            The data in a the serialized data format\n\n        Example\n        ------\n        >>> serializer = get_serializer('json')\n        >>> data ['foo', 'bar']\n        >>> json_data = serializer.marshal(data)\n        \"\"\"\n        logger.debug(\"data type: %s\", type(data))\n        try:\n            retval = self._marshal(data)\n        except Exception as err:\n            msg = f\"Error serializing data for type {type(data)}: {str(err)}\"\n            raise FaceswapError(msg) from err\n        logger.debug(\"returned data type: %s\", type(retval))\n        return retval\n\n    def unmarshal(self, serialized_data):\n        \"\"\" Unserialize data to its original object type\n\n        Parameters\n        ----------\n        serialized_data: varies\n            Data in serializer format that is to be unmarshalled to its original object\n\n        Returns\n        -------\n        data: varies\n            The data in a python object format\n\n        Example\n        ------","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/deepfakes/faceswap/blob/f530cb7508ae670f6474f8a7d9c4df94705cf96b/lib/serializer.py#L124-L160","documentation":"Serializer.marshal wraps ANY exception from the format-specific _marshal call: the data could not be serialized to the target format (commonly pickle-refusing objects, JSON-unserializable types like numpy arrays/sets/datetime, or circular references). FaceswapError reports the data type and the underlying error string.","triggerScenarios":"Calling save/marshal with json serializer on data containing numpy arrays, sets, tuples-as-keys, or custom objects without a JSON encoder; pickling lambdas or unpicklable objects with the pickle serializer.","commonSituations":"Persisting alignments or state dicts that embed numpy landmarks; user plugins injecting custom objects into serialized state; version upgrades changing stored structures.","solutions":["Convert numpy types before serializing: ndarray.tolist(), numpy scalars via .item().","Use the pickle serializer for arbitrary objects, or a custom default= handler for JSON.","Read str(err) in the message — it names the exact unserializable type."],"exampleFix":"import numpy as np\n\n# before\ndata = {'landmarks': np.array([1.0, 2.0])}\nget_serializer('json').marshal(data)  # TypeError -> FaceswapError\n\n# after\ndata = {'landmarks': np.array([1.0, 2.0]).tolist()}\nget_serializer('json').marshal(data)","handlingStrategy":"validation","validationCode":"import numpy as np\n\ndef json_safe(obj):\n    if isinstance(obj, np.ndarray):\n        return obj.tolist()\n    if isinstance(obj, (np.integer,)):\n        return int(obj)\n    if isinstance(obj, (np.floating,)):\n        return float(obj)\n    raise TypeError(f'not JSON serializable: {type(obj)}')\n\njson.dumps(data, default=json_safe)  # dry-run before serializer.save","typeGuard":null,"tryCatchPattern":"try:\n    serializer.save(filename, data)\nexcept FaceswapError as err:\n    if 'Error serializing' in str(err):\n        data = sanitize(data)  # convert numpy/custom types, then retry once\n        serializer.save(filename, data)\n    else:\n        raise","preventionTips":["Convert numpy arrays/scalars to plain Python before persisting.","Use pickle serializer for object graphs JSON cannot express.","Dry-run marshal on a sample at pipeline startup to fail early."],"tags":["serialization","json","pickle","type-error"],"backgroundTag":null,"analyzedSha":"f530cb7508ae670f6474f8a7d9c4df94705cf96b","analyzedAt":"2026-08-15T02:59:26.626Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}