Mam ten sam problem, gdy zaktualizowano poduszkę z 2.8.1
na 4.1.0
.
Oto kawałek przykład kodu, który wygeneruje wyjątek, gdy uruchomiony Pillow==4.1.0
:
from PIL import Image
img = Image.new('RGBA', [100,100])
# An empty mask is created to later overlay the original image (img)
mask = Image.new('L', img.size, 255)
# Get transparency (mask) layer pixels, they will be changed!
data = mask.load()
# The function used later
def foo(x,y): return round(1.0*x/(y+1))
# Update all pixels in the mask according to some function (foo)
for x in range(img.size[0]):
for y in range(img.size[1]):
data[x,y] = foo(x,y)
wyjściowa:
Traceback (most recent call last):
File "x.py", line 12, in <module>
data[x,y] = foo(x,y)
SystemError: new style getargs format but argument is not a tuple
Rzeczywisty błąd tutaj ma nic z tym, co jest powiedziane w wyjątku. W rzeczywistości jest to typ danych przypisanych do danych, które są błędne. W 2.8.1
zarówno int
i float
są ważne, więc takie rzeczy jak data[x,y]=1.0
jest ważna, natomiast w 4.1.0
ty potrzeba używać liczb całkowitych jak nic z tego:
data[x,y]=1
data[x,y]=int(1.0)
Tak więc w powyższym przykładzie foo
może być na nowo do następujących pracować zarówno 2.8.1
i 4.1.0
.
def foo(x,y): return int(round(1.0*x/(y+1)))
(2,2) nie działa, to musi być coś, co dzieli modulo 1 –