{"record":{"id":"d8a657e498e0484a","repo":"TheAlgorithms/Python","slug":"numbers-must-be-an-iterable-of-integers-d8a657","errorCode":null,"errorMessage":"numbers must be an iterable of integers","messagePattern":"numbers must be an iterable of integers","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"dynamic_programming/minimum_size_subarray_sum.py","lineNumber":49,"sourceCode":"    >>> minimum_subarray_sum(-6, [])\n    0\n    >>> minimum_subarray_sum(-6, [3, 4, 5])\n    1\n    >>> minimum_subarray_sum(8, None)\n    0\n    >>> minimum_subarray_sum(2, \"ABC\")\n    Traceback (most recent call last):\n        ...\n    ValueError: numbers must be an iterable of integers\n    \"\"\"\n    if not numbers:\n        return 0\n    if target == 0 and target in numbers:\n        return 0\n    if not isinstance(numbers, (list, tuple)) or not all(\n        isinstance(number, int) for number in numbers\n    ):\n        raise ValueError(\"numbers must be an iterable of integers\")\n\n    left = right = curr_sum = 0\n    min_len = sys.maxsize\n\n    while right < len(numbers):\n        curr_sum += numbers[right]\n        while curr_sum >= target and left <= right:\n            min_len = min(min_len, right - left + 1)\n            curr_sum -= numbers[left]\n            left += 1\n        right += 1\n\n    return 0 if min_len == sys.maxsize else min_len\n","sourceCodeStart":31,"sourceCodeEnd":63,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/dynamic_programming/minimum_size_subarray_sum.py#L31-L63","documentation":"Raised by minimum_subarray_sum(target, numbers) when numbers is not a list/tuple or contains non-int elements. Empty numbers returns 0 earlier, and target==0 present in numbers returns 0 before this check; otherwise the sliding-window algorithm requires an int sequence. Generators, strings, numpy arrays, and float-containing lists all fail.","triggerScenarios":"minimum_subarray_sum(2, 'ABC') as in the doctest; minimum_subarray_sum(7, [1.5, 2, 3]) with a float; passing a numpy array or map object as numbers.","commonSituations":"Sensor/metrics data arriving as floats; string inputs from stdin or web forms; feeding a range or generator directly instead of a list.","solutions":["Coerce to a list of ints: minimum_subarray_sum(target, [int(x) for x in numbers]).","Use list(range(...)) rather than a raw range/generator.","Convert numpy inputs with .tolist()."],"exampleFix":"# before\nlength = minimum_subarray_sum(7, (int(x) for x in raw))  # generator -> ValueError\n\n# after\nlength = minimum_subarray_sum(7, [int(x) for x in raw])","handlingStrategy":"type-guard","validationCode":"if not isinstance(numbers, (list, tuple)):\n    numbers = list(numbers)\nnumbers = [int(n) for n in numbers]\nlength = minimum_subarray_sum(target, numbers)","typeGuard":"def is_int_sequence(values: object) -> bool:\n    return isinstance(values, (list, tuple)) and all(isinstance(v, int) for v in values)","tryCatchPattern":"try:\n    length = minimum_subarray_sum(target, numbers)\nexcept ValueError as exc:\n    if 'iterable of integers' in str(exc):\n        length = minimum_subarray_sum(target, [int(n) for n in numbers])\n    else:\n        raise","preventionTips":["Convert stdin/web-form numbers with int() before algorithm calls.","Wrap generators in list() — sliding-window APIs need indexed access.","Validate element types once at ingestion rather than per algorithm call."],"tags":["python","input-validation","type-error","dynamic-programming"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}