Подсказки типов Python с дополнительными зависимостямиPython

Программы на Python
Ответить
Anonymous
 Подсказки типов Python с дополнительными зависимостями

Сообщение Anonymous »

Я пишу несколько заглушек типов Python для пакета и столкнулся с функцией, которая может принимать либо список, либо, если доступен numpy, numpy.ndarray. Если присутствует numpy и функции присвоен numpy.ndarray, она преобразует массив в список, прежде чем продолжить работу с остальной частью функции, но если numpy отсутствует, раздел, обрабатывающий массив, пропускается. Вот пример этого:

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

def foo(bar):
try:
import numpy as np
except ImportError:
np = None

if (np is not None) and isinstance(bar, np.ndarray):
bar = bar.tolist()

bar.append(0)

return bar
Проблема, с которой я столкнулся, заключается в том, как включить np.ndarray в подсказку типа для bar без строгого требования присутствия numpy, когда включена проверка типа. Я могу сделать следующее, чтобы сохранить numpy необязательным в время выполнения:

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

import typing as ty

if ty.TYPE_CHECKING:
import numpy as np

def foo(bar: list | np.ndarray[tuple[int], ty.Any]) -> list:
try:
import numpy as np
except ImportError:
np = None

if (np is not None) and isinstance(bar, np.ndarray):
bar = bar.tolist()

bar.append(0)

return bar
Однако это по-прежнему вызывает следующую ошибку в mypy, если он не может найти numpy:

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

Cannot find implementation or library stub for module named "numpy" Mypy(import-not-found) [Ln 4, Col 1]
Можно ли избежать этой ошибки, даже если numpy не установлен? Очевидно, что установка numpy исключительно для целей набора текста не представляет большого труда, но если бы в подобных ситуациях было значительно больше дополнительных зависимостей, было бы несколько неудобно/неэффективно устанавливать все дополнительные зависимости для удовлетворения mypy, не используя при этом ни одной из реальных функций пакетов. Я также не хочу полностью игнорировать ошибки, поскольку было бы легко скрыть законную проблему с отсутствующими заглушками типов в списке посторонних ошибок импорта mypy.


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

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

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

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

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

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