Использование Annotated[...] в операторе типаPython

Программы на Python
Ответить
Anonymous
 Использование Annotated[...] в операторе типа

Сообщение Anonymous »

Оператор type является относительно новым (3.12+), и его поддержка в mypy является экспериментальной:

Тип PEP 695 псевдонимы пока не поддерживаются. Используйте
--enable-incomplete-feature=NewGenericSyntax для экспериментальной поддержки

Вот короткая программа, в которой mypy (с включенной функцией) это делает не похоже на первые две строки типа DataAs.... = ...:

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

from typing import Annotated
from pydantic import AfterValidator

def validate_anything(data):
return data

type DataAsDict = Annotated[dict[str, str], AfterValidator[validate_anything]]
type DataAsList = Annotated[list[str], AfterValidator[validate_anything]]

type DataType = DataAsDict | DataAsList

def foo(data: DataType) -> None:
pass
Ошибка (два случая):

ошибка: тип «type[AfterValidator]» не является универсальным. и не индексируется [разное]

Удаление ключевого слова type решает проблему:

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

DataAsDict = Annotated[dict[str, str], AfterValidator[validate_anything]]
DataAsList = Annotated[list[str], AfterValidator[validate_anything]]

type DataType = DataAsDict | DataAsList
Мое отношение к набору текста тоже экспериментальное, и я в замешательстве. Был ли исходный код написан неправильно, т. е. был ли mypy прав, когда обнаружил эти ошибки? Или экспериментальная функция в данном случае пока не пригодна (это нормально, меня предупредили).

Подробнее здесь: https://stackoverflow.com/questions/790 ... -statement
Ответить

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

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

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

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

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