TheAlgorithms/Python · error · ValueError

The position should be an integer

Error message

The position should be an integer

What it means

Raised by kth_largest_element() in data_structures/arrays/kth_largest_element.py when position is not an int (e.g. 1.5, '2', None). Note it raises ValueError, not TypeError, despite being a type problem — a quirk of this implementation. It fires only for non-empty arrays, since empty arrays return -1 first.

Source

Thrown at data_structures/arrays/kth_largest_element.py:97

        >>> kth_largest_element([3.1, 1.2, 5.6, 4.7,7.9,5,0], 2)
        5.6
        >>> kth_largest_element([-2, -5, -4, -1], 1)
        -1
        >>> kth_largest_element([], 1)
        -1
        >>> kth_largest_element([3.1, 1.2, 5.6, 4.7, 7.9, 5, 0], 1.5)
        Traceback (most recent call last):
        ...
        ValueError: The position should be an integer
        >>> kth_largest_element((4, 6, 1, 2), 4)
        Traceback (most recent call last):
        ...
        TypeError: 'tuple' object does not support item assignment
    """
    if not arr:
        return -1
    if not isinstance(position, int):
        raise ValueError("The position should be an integer")
    if not 1 <= position <= len(arr):
        raise ValueError("Invalid value of 'position'")
    low, high = 0, len(arr) - 1
    while low <= high:
        if low > len(arr) - 1 or high < 0:
            return -1
        pivot_index = partition(arr, low, high)
        if pivot_index == position - 1:
            return arr[pivot_index]
        elif pivot_index > position - 1:
            high = pivot_index - 1
        else:
            low = pivot_index + 1
    return -1


if __name__ == "__main__":
    import doctest

View on GitHub (pinned to f5988cc097)

Solutions

  1. Convert to int at the call site: kth_largest_element(arr, int(position)).
  2. For float sources, verify the value is integral first: if position != int(position): reject.
  3. Parse CLI/config values with int() at the boundary.

Example fix

# before
kth_largest_element([3, 1, 5, 4, 7, 5, 0], 1.5)  # ValueError

# after
kth_largest_element([3, 1, 5, 4, 7, 5, 0], 2)  # 5
Defensive patterns

Strategy: type-guard

Validate before calling

if not isinstance(position, int):
    position = int(position)  # or reject
result = kth_largest_element(arr, position)

Type guard

def is_int(value: object) -> bool:
    return isinstance(value, int) and not isinstance(value, bool)

Prevention

When it happens

Trigger: Calling kth_largest_element([3,1,5,4,7,5,0], 1.5) or passing position as a string ('2'), a float parsed from input, or numpy float scalar.

Common situations: Position read from CLI args (always strings) without int() conversion, or from JSON where it deserializes as a float (e.g. 2.0 — note isinstance(2.0, int) is False so even whole floats raise).

Related errors


AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14). Data as JSON: /api/errors/55da08fda0d2a03b. Report an issue: GitHub.