{"record":{"id":"841feaad998bb5f3","repo":"keras-team/keras","slug":"the-name-argument-should-be-a-number-or-a-lis-841fea","errorCode":null,"errorMessage":"The `{name}` argument should be a number (or a list of two numbers) in the range [{self._FACTOR_BOUNDS[0]}, {self._FACTOR_BOUNDS[1]}]. Received: factor={factor}","messagePattern":"The `(.+?)` argument should be a number \\(or a list of two numbers\\) in the range \\[(.+?), (.+?)\\]\\. Received: factor=(.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/random_erasing.py","lineNumber":93,"sourceCode":"            self.height_axis = -2\n            self.width_axis = -1\n            self.channel_axis = -3\n        else:\n            self.height_axis = -3\n            self.width_axis = -2\n            self.channel_axis = -1\n\n    def _set_factor_by_name(self, factor, name):\n        error_msg = (\n            f\"The `{name}` argument should be a number \"\n            \"(or a list of two numbers) \"\n            \"in the range \"\n            f\"[{self._FACTOR_BOUNDS[0]}, {self._FACTOR_BOUNDS[1]}]. \"\n            f\"Received: factor={factor}\"\n        )\n        if isinstance(factor, (tuple, list)):\n            if len(factor) != 2:\n                raise ValueError(error_msg)\n            if (\n                factor[0] > self._FACTOR_BOUNDS[1]\n                or factor[1] < self._FACTOR_BOUNDS[0]\n            ):\n                raise ValueError(error_msg)\n            lower, upper = sorted(factor)\n        elif isinstance(factor, (int, float)):\n            if (\n                factor < self._FACTOR_BOUNDS[0]\n                or factor > self._FACTOR_BOUNDS[1]\n            ):\n                raise ValueError(error_msg)\n            factor = abs(factor)\n            lower, upper = [max(-factor, self._FACTOR_BOUNDS[0]), factor]\n        else:\n            raise ValueError(error_msg)\n        return lower, upper\n","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/random_erasing.py#L75-L111","documentation":"RandomErasing validates its factor/scale argument in _set_factor_by_name during __init__. The sequence form must be exactly two numbers; any other list/tuple length raises this ValueError before the layer is used, so an invalid erase-area range fails fast.","triggerScenarios":"RandomErasing(factor=[0.02]) (single element), factor=[0.02, 0.2, 0.4], or factor=[] when constructing the layer.","commonSituations":"Converting RandomErasing from torchvision, where scale is a 2-tuple, and accidentally keeping a 3-element tuple from a custom sampler; config files with truncated lists; copy-paste from a layer that takes per-dimension triples.","solutions":["Pass factor as [lower, upper], e.g. RandomErasing(factor=[0.02, 0.33])","Or pass a single number such as factor=0.2","Validate config list lengths before layer construction"],"exampleFix":"# before\nlayers.RandomErasing(factor=[0.02])\n# after\nlayers.RandomErasing(factor=[0.02, 0.33])","handlingStrategy":"validation","validationCode":"f = [0.02, 0.33]\nassert isinstance(f, (tuple, list)) and len(f) == 2, \"factor must be [lower, upper]\"","typeGuard":"def is_factor_pair(v) -> bool:\n    return isinstance(v, (tuple, list)) and len(v) == 2","tryCatchPattern":"try:\n    layer = RandomErasing(factor=f)\nexcept ValueError:\n    layer = RandomErasing(factor=0.25)","preventionTips":["Use 2-element [lower, upper] lists in configs","Add schema validation for augmentation config files"],"tags":["keras","preprocessing","argument-validation","factor-range"],"backgroundTag":"argument-shape-validation","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}