Должен ли я использовать Assert для обхода ошибок статического типа Pyright?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли я использовать Assert для обхода ошибок статического типа Pyright?

Сообщение Anonymous »

Следующий пример представляет собой минимальное выражение большого класса.
Я выполняю проверку перед вызовом func2, чтобы убедиться, что действительно является float, если mode=aaa. Но это приводит к ошибке в func2, поскольку я определяю: float | Нет:

Код: Выделить всё

def func1(mode: str, a: float | None) -> None:
if mode == "aaa":
if a is None:
raise ValueError("a is None")
func2(mode, a)

def func2(mode: str, a: float | None):
if mode == "aaa":
print(a / 45.0)  # pyright error: Operator "/" not supported for "None"

func1("aaa", 2.3)
Если вместо этого я определю: float, ошибка переместится на вызов func1:

Код: Выделить всё

def func1(mode: str, a: float | None) -> None:
if mode == "aaa":
if a is None:
raise ValueError("a is None")
func2(mode, a)  # pyright error: Type "float | None" is not is not assignable to type "float"

def func2(mode: str, a: float):
if mode == "aaa":
print(a / 45.0)

func1("aaa", 2.3)
Я мог бы придумать решение — использовать Assert:

Код: Выделить всё

def func1(mode: str, a: float | None) -> None:
if mode == "aaa":
if a is None:
raise ValueError("a is None")
func2(mode, a)

def func2(mode: str, a: float | None):
if mode == "aaa":
assert isinstance(a, float)
print(a / 45.0)

func1("aaa", 2.3)
Это избавляет от ошибки пирайта, но я не уверен, что это правильное использование утверждения. Есть ли лучший/более питонический способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ype-errors
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»