def is_prime(number: int) -> bool: … # number must be integer if type(number) != int: raise TypeError("Non-integers cannot be tested for primality.")
By providing a type annotation, you have already documented that only int
s should be passed to the function, and you could even use static analysis tools to verify this. There is no need to do a dynamic type check on top of that.
Even without type annotations, there are good arguments for not doing type checks, as explained very well, for example, in section 4 of this answer to another question.