Pyright - это средство проверки статического типа для Python, разработанное Microsoft и реализованное в TypeScript. Он поддерживает PEP 484, PEP 526, PEP 544 и имеет умный вывод типа.
Похоже, что 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).
Например, рассмотрим эту модель, которая хранит списо...
Вот мой (значительно упрощенный) код:
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...
15 Авг 2023 в 13:08
В 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...
Я создаю собственный модуль CLI Python, используя docx2pdf.
Модуль docx2pdf использует tqdm для отображения индикаторов выполнения во время Файлы .docx конвертируются в .pdf.
В моем модуле я использую параметр CLI log для включения/отключения вывода журнала консоли.
Переключение вывода индикатора в...
5 Авг 2023 в 12:19
По сути, я хочу сказать, что у меня есть тип 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 и исп...
2 Авг 2023 в 09:17
Я обновил настройки своей арки и скомпилировал 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. Также пред...
У меня проблемы с подсказкой типа 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 (поскольку, если я не ошиб...
Я пытаюсь ввести подсказки типов в устаревший код Python 2.7. Многие классы объявляют атрибуты класса со значением по умолчанию None (чтобы избежать изменяемых значений по умолчанию), а затем присваивают значение в конструкторе, например:
class Myclass(object):
_myList = None # Description
...
10 Май 2023 в 08:22
Я использую редактор Zed с Pyright, и он работает как шарм. Однако я хочу использовать Ruff linter с Pyright, но я не нашел никакой документации о том, как это сделать для редактора Zed. Нужно ли указывать линтер непосредственно в pyrightconfig.json, и если да, то как?
Я немного запутался в языков...
4 Май 2023 в 03:45
Итак, у меня есть ситуация, подобная этому примеру:
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', '...
1
Как определить константы в Python на основе if/else без предупреждения о нарушениях авторских прав
Я пытаюсь использовать довольно типичный шаблон if/else -> CONSTANT = ... в python, но получаю ошибку пирайта, которая "... постоянна (потому что она в верхнем регистре) и не может быть переопределена" (reportConstantRedefinition). Хотя это не синтаксическая ошибка, я пытаюсь понять, как избежать п...
Почему доступный только для чтения Mapping не работает как подсказка типа для атрибута Dict? Я знаю, что dict является изменяемым, что делает field инвариантным, но не могли бы вы объяснить, что может пойти не так, если передать его в доступный только для чтения тип Mapping?
Рассмотрим следующий ко...
В настоящее время я пытаюсь узнать, как лучше всего включать типы в мой код Python, но я немного озадачен тем, как правильно вводить **kwargs в сигнатурах моих функций.
Минимальный пример того, что у меня сейчас есть:
def foo(name: str, **kwargs: Dict[str, Any]) -> int:
modified_name: str = f'T...
22 Мар 2023 в 03:29