Reputation: 41
I am trying to write a function that iterates over a list of images in python so that they are accessible for Pillow image processing.
ImTestA = Image.open("A.png")
ImTestB = Image.open("B.png")
ImTestC = Image.open("C.png")
ImTest1 = Image.open("1.png")
ImTest2 = Image.open("2.png")
ImTest3 = Image.open("3.png")
ImTest4 = Image.open("4.png")
ImTest5 = Image.open("5.png")
ImTest6 = Image.open("6.png")
I currently have the above but am trying to refactor it into something I can assign different length to (use a list with A-K or J-Z).
from PIL import Image
AtoC = ["A.png", "B.png", "C.png"]
def OpenAns(quest):
AtoCImages = []
for image in quest:
AtoCImages.append(Image.open(image))
return AtoCImages
OpenAns(AtoC)
ImTestA = AtoCImages[0]
ImTestB = AtoCImages[1]
ImTestC = AtoCImages[2]
Fixed earlier error, and went back to same problem as before. I am just trying to clean up my code and have it nice and DRY. Any help is appreciated.
Traceback (most recent call last):
File "C:\ImageTest.py", line 13, in <module>
ImTestA = AtoCImages[0]
NameError: name 'AtoCImages' is not defined
Maybe I will just have separate files with a list in each. If I cant shorten this up.
Upvotes: 4
Views: 17437
Reputation: 15
AToCImages
is a list you created within OpenAns()
function, hence it is a local variable for that function. Local variables can't be accessed beyond their scope (in this case the OpenAns()
function) and are only defined within it. Hence when you try to assign it outside the function,
ImTestA = AtoCImages[0]
ImTestB = AtoCImages[1]
ImTestC = AtoCImages[2]
it throws an error.
Upvotes: 1
Reputation: 54340
Change:
for image in AtoC:
AtoCIm = []
AtoCIm.append(Image.open(image))
to
AtoCIm = []
for image in AtoC:
AtoCIm.append(Image.open(image))
will do it.
You are creating a new list every iteration, rather than creating a list once and appending new items to it. Therefore, your list always has only 1 item. Attempting to get the 2nd item, AtoCIm[1]
, will raise exception.
Upvotes: 7