Pyright - это средство проверки статического типа для Python, разработанное Microsoft и реализованное в TypeScript. Он поддерживает PEP 484, PEP 526, PEP 544 и имеет умный вывод типа.

Подробнее про pyright...

Похоже, что Pyright (средство проверки типов Python, созданное Microsoft) можно использовать только как инструмент командной строки. или из VS Code. Но можно ли вызвать пирайт из кода (как API)? Например, mypy поддерживает использование типа: import sys from mypy import api result = api.run("your...
30 Окт 2023 в 09:46
Я относительно новичок в Pylance (средстве проверки статического типа VS Code, основанном на Pyright) и только что наткнулся на эту ошибку проверки типа с бесконечным итератором count(). У меня есть код, с которым я играл, и который я сократил до следующей базовой версии, воспроизводящей проблему: ...
19 Сен 2023 в 03:38
Pydantic предлагает средства преобразования входных данных в окончательный тип в рамках инициализации модели. Однако это плохо интегрируется со средствами проверки статических типов. Обратите внимание: я использую Pydantic 1.X (сейчас 1.10.12). Например, рассмотрим эту модель, которая хранит списо...
13 Сен 2023 в 03:59
Вот мой (значительно упрощенный) код: def myfun(X:list[str|int]): for x in X: print(x) X = [1,2,3] myfun(X) Пайрайт жалуется на последнюю строку, потому что я предоставляю список int, в то время как функция требует list[int|str]. Как лучше всего поступить в этом случае? Есть ли способ...
5 Сен 2023 в 15:10
Если сразу открыть файл через nvim, то все работает, но если сначала открыть, например, конфиг, а после питоновый файл, то пирайт не работает vim.cmd [[packadd packer.nvim]] return require('packer').startup(function() use 'wbthomason/packer.nvim' use 'neovim/nvim-lspconfig' use 'williamb...
В neovim NVIM v0.10.0-dev на Linux Mint. Я написал всю свою конфигурацию на «lua» и пока очень доволен. Единственное, что не работает, это lsp с python. Я настроил lsp и cmp и mason, mason-lspconfig. Я отлично работаю с tex, java и html, но клиент python не подключается к буферам. При открытии ...
11 Авг 2023 в 18:15
У меня есть следующий фрагмент кода from contextlib import _GeneratorContextManager, contextmanager GoodWrapperType = Callable[[int, str], _GeneratorContextManager[None]] BadWrapperType = Callable[[int, str], Generator[None, None, None]] def wrapper() -> GoodWrapperType: @contextmanager d...
9 Авг 2023 в 13:28
У меня есть общий класс с методом next, который возвращает экземпляр самого себя, параметризованный в переменную разностного типа. Я могу указать тип возвращаемого значения метода next, используя " для ссылки на сам класс: DataIn = TypeVar('DataIn') DataOut = TypeVar('DataOut') @dataclass class Msg...
9 Авг 2023 в 00:37
Я создаю собственный модуль CLI Python, используя docx2pdf. Модуль docx2pdf использует tqdm для отображения индикаторов выполнения во время Файлы .docx конвертируются в .pdf. В моем модуле я использую параметр CLI log для включения/отключения вывода журнала консоли. Переключение вывода индикатора в...
По сути, я хочу сказать, что у меня есть тип T, для которого определен T.__sub__(self, other: T) -> T. В настоящее время я могу сделать его проверку типов, как если бы он определил T.__sub__(self, other: Any) -> Any, но работает, только если T - это класс, который я определил сам. Я пытаюсь ввести...
2 Авг 2023 в 17:57
У меня есть кадр данных Pandas с мультииндексом, так что это правильный код: df.index = df.index.reorder_levels(["B", "A"]) Но в VS Code это отображается как ошибка, поскольку по умолчанию тип df.index равен Index, а не MultiIndex. Я могу создать новый тип только для кадров данных MultiIndex и исп...
Я обновил настройки своей арки и скомпилировал neovim 0.9.1 на только что установленном Debian 12. Rust-analyzer не показывает никаких сообщений и не предлагает автодополнения. Rust-analyzer устанавливается mason, добавлением компонента rustup и установкой npm. Я также добавил его в PATH, чтобы в не...
28 Июл 2023 в 19:53
Самый простой пример того, что я пытаюсь сделать, это from typing import AnyStr, Iterable def joiner(delim: AnyStr, objs: Iterable[AnyStr]) -> AnyStr: return delim.join(objs) У MyPy нет проблем с этим, поскольку пиррайт помечает это как ошибку. /tmp/type_demo.py /tmp/type_demo.py:7:27 - erro...
21 Июл 2023 в 16:09
Я только что установил PyRight через npm и использую его как lsp в neovim. У меня есть пакет с заглушкой, который работает в PyCharm. mystub __init__.pyi object.pyi ... Я попытался установить «stubPath» в моем pyrightconfig.json как для папки, содержащей mystub, так и для mystub. Также пред...
10 Июл 2023 в 13:48
У меня проблемы с подсказкой типа Numpy (version 1.25). Предположим, следующий код (/tmp/asdf.py): import numpy as np tx: int = 32 out_tx = np.clip( tx, 0, 100, ) pyright выдает следующие ошибки: $ pyright /tmp/asdf.py /tmp/asdf.py /tmp/asdf.py:5:9 - error: Arg...
8 Июл 2023 в 08:03
Я использую пирайт в своем проекте, чтобы иметь некоторую безопасность типов, и я столкнулся с проблемой типа, которую я не понимаю. Это действительно легко исправить (используя covariant=True в TypeVar), но я даже не понимаю, почему это само по себе является проблемой. Вот пример моей проблемы: fr...
28 Июн 2023 в 13:19
При проверке типов с помощью инструмента pyright я столкнулся со следующими проблемами. (Python 3.11, пирайт 1.1.310) Мой код: class TypeCast(str, enum.Enum): STRING = str FLOAT = float def cast_int_to_str(value: int) -> str: return _cast_int_value(value, type_cast=TypeCast.STRING) de...
31 Май 2023 в 12:55
Я хотел бы указать TypedDict, который указывает некоторые поля и типы, но также позволяет иметь «мешок» дополнительных вещей, разрешенных в dict. Конкретным примером этого может быть добавление информации о типизации в декоратор, который будет использоваться вместе с Flask (поскольку, если я не ошиб...
13 Май 2023 в 00:13
Я пытаюсь ввести подсказки типов в устаревший код Python 2.7. Многие классы объявляют атрибуты класса со значением по умолчанию None (чтобы избежать изменяемых значений по умолчанию), а затем присваивают значение в конструкторе, например: class Myclass(object): _myList = None # Description ...
10 Май 2023 в 08:22
Я использую редактор Zed с Pyright, и он работает как шарм. Однако я хочу использовать Ruff linter с Pyright, но я не нашел никакой документации о том, как это сделать для редактора Zed. Нужно ли указывать линтер непосредственно в pyrightconfig.json, и если да, то как? Я немного запутался в языков...
Итак, у меня есть ситуация, подобная этому примеру: from typing import Literal, overload, TypedDict, LiteralString class Test1(TypedDict) test1: str class Test2(TypedDict): test2: str @overload def _get_actor_key( actor: Literal["test1"], game_action: Test1, ) -> str: ... @ov...
27 Апр 2023 в 14:47
Я новичок в Python, и я решал вопросы Advent of Code с помощью Python. Однако я столкнулся с проблемой при решении вопроса дня 2. Я определил dict, который отображает tuple в постоянное значение. В частности, я определил score_table как: score_table = {('A', 'X'): 3, ('A', 'Y'): 6, ('A', '...
11 Апр 2023 в 02:47
Я пытаюсь использовать довольно типичный шаблон if/else -> CONSTANT = ... в python, но получаю ошибку пирайта, которая "... постоянна (потому что она в верхнем регистре) и не может быть переопределена" (reportConstantRedefinition). Хотя это не синтаксическая ошибка, я пытаюсь понять, как избежать п...
30 Мар 2023 в 19:21
Почему доступный только для чтения Mapping не работает как подсказка типа для атрибута Dict? Я знаю, что dict является изменяемым, что делает field инвариантным, но не могли бы вы объяснить, что может пойти не так, если передать его в доступный только для чтения тип Mapping? Рассмотрим следующий ко...
27 Мар 2023 в 04:40
В настоящее время я пытаюсь узнать, как лучше всего включать типы в мой код Python, но я немного озадачен тем, как правильно вводить **kwargs в сигнатурах моих функций. Минимальный пример того, что у меня сейчас есть: def foo(name: str, **kwargs: Dict[str, Any]) -> int: modified_name: str = f'T...
22 Мар 2023 в 03:29