Можно ли объявить статическую типизированную переменную?

Если у меня есть следующая функция:

def rand(int: int) -> int:
    ...

rand('2')

Это работает, потому что когда я вызываю функцию rand, редактор показывает ошибку. Но он все еще компилирует код. И я могу написать что-то вроде:

def rand(num: int) -> int:
    if not isinstance(num, int):
        raise ValueError(f"{num} is not a integer")
    return 0

Я хочу вызвать ошибку без какой-либо логики в функции. Можно ли вызвать ошибку при вызове функции и без ее проверки?


person nonsensei    schedule 13.03.2020    source источник
comment
Из связанного вопроса: если статическая типизация должна быть полностью применена в Python, то это уже не будет Python. Это динамический язык утиного типа, и в результате он потеряет весь динамизм. Если вы действительно собираетесь использовать язык со статической типизацией, вам лучше не использовать Python.   -  person John Kugelman    schedule 13.03.2020
comment
Что значит лучше не использовать python? Так почему же они создали объявление статического типа?   -  person nonsensei    schedule 13.03.2020
comment
Я просто спрашиваю, есть ли другой возможный способ без проверки функции   -  person nonsensei    schedule 13.03.2020
comment
Статическая проверка типов лучше, чем отсутствие проверки типов, и помогает обнаруживать определенные классы ошибок проще и раньше, чем ждать, пока они сработают во время выполнения. Принуждение ввода во время выполнения — это совершенно другая игра, требующая других стратегий программирования; просто в качестве специального примера передача фиктивных объектов для тестов становится более сложной, если этот фиктивный объект проверяется на его фактическую иерархию типов, а не просто на соответствие определенным поведенческим ожиданиям.   -  person deceze♦    schedule 13.03.2020