PIL и Python статическая типизация - PullRequest
0 голосов
/ 04 октября 2019

У меня есть аргумент функции, который может принимать несколько типов для изображения:

def somefunc(img: Union[np.array, Image, Path, str]):

PIL Image в этом случае выдает следующее исключение:

TypeError: Union[arg, ...]: each arg must be a type. Got <module 'PIL.Image' from ...

Что делаетсмысл после осмотра объекта изображения далее:

print(type(Image.open('someimage.tiff')))
>>> <class 'PIL.TiffImagePlugin.TiffImageFile'>

Как бы я мог указать обобщенный тип для изображения PIL? Он из файла и его формат не имеет значения.

1 Ответ

0 голосов
/ 04 октября 2019

У меня нет удобной IDE, но вы получаете ошибку:

. . . Got <module 'PIL.Image'

Предполагается, что вы пытаетесь использовать сам модуль в качестве типа, когда вы имеете в виду обращение кImage объект, содержащийся в модуле.

Я предполагаю, что у вас есть импорт, подобный

from PIL import Image

, который Image ссылается на модуль, а не на объект.

Вы хотите что-то вроде

from PIL.Image import Image

, чтобы импортировать сам объект.

Обратите внимание, что теперь Image относится к объекту. Вам может потребоваться сделать что-то подобное, если вы хотите сослаться на объект и модуль в одном файле:

from PIL import Image as img
from PIL.Image import Image

Теперь модуль имеет псевдоним img.

...