TheAlgorithms/Python · error · TypeError
Input value must be a positive integer. Input value: {number
Error message
Input value must be a positive integer. Input value: {number} What it means
Raised by is_germain_prime in maths/germain_primes.py when number is not an int or is less than 1. A Germain prime check (p and 2p+1 both prime) is only defined for positive integers, so the combined guard raises TypeError with the offending value interpolated into the message. Note the message says 'positive integer' but the exception type is TypeError even for the negative-int case.
Source
Thrown at maths/germain_primes.py:36
True
>>> is_germain_prime(11)
True
>>> is_germain_prime(4)
False
>>> is_germain_prime(23)
True
>>> is_germain_prime(13)
False
>>> is_germain_prime(20)
False
>>> is_germain_prime('abc')
Traceback (most recent call last):
...
TypeError: Input value must be a positive integer. Input value: abc
"""
if not isinstance(number, int) or number < 1:
msg = f"Input value must be a positive integer. Input value: {number}"
raise TypeError(msg)
return is_prime(number) and is_prime(2 * number + 1)
def is_safe_prime(number: int) -> bool:
"""Checks if input number and (number - 1)/2 are prime.
The smallest safe prime is 5, with the Germain prime is 2.
>>> is_safe_prime(5)
True
>>> is_safe_prime(11)
True
>>> is_safe_prime(1)
False
>>> is_safe_prime(2)
False
>>> is_safe_prime(3)
FalseView on GitHub (pinned to f5988cc097)
Solutions
- Convert inputs to int and check >= 1 before calling.
- Start candidate loops at 2 (primes) rather than 0 or 1.
- For numpy integers, convert with int(x) first.
Example fix
// before
result = is_germain_prime(candidate) # candidate may be str/float/0
// after
if not isinstance(candidate, int) or candidate < 1:
candidate = int(candidate)
result = is_germain_prime(candidate) Defensive patterns
Strategy: type-guard
Validate before calling
if not isinstance(number, int):
number = int(number)
if number < 1:
raise ValueError(f"need positive integer, got {number}") Type guard
def is_positive_int_strict(v) -> bool:
return isinstance(v, int) and not isinstance(v, bool) and v >= 1 Try / catch
try:
is_germain_prime(n)
except TypeError as e:
# message embeds the bad value; log and reject
... Prevention
- Normalize to int at input boundaries
- Start prime-enumeration loops at 2
When it happens
Trigger: Calling is_germain_prime('abc'), is_germain_prime(0), is_germain_prime(-7), or is_germain_prime(13.0). The single 'if not isinstance(number, int) or number < 1' check covers all of these.
Common situations: Passing parsed string input from CLI/web; floats from numeric libraries (numpy int64 also fails isinstance(x, int) on some platforms); probing 0 or negatives when enumerating candidates from 0.
Related errors
- number must be integer and greater than zero
- Input value of [number={number}] must be an integer
- {num}: Invalid input, please enter a positive integer.
- Input value of [number={number}] must be an integer
- Parameter nth must be int or castable to int.
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/1a1304624d7bf2e1.
Report an issue: GitHub.