I have multiple files that I need to load so I'm using a dict to shorten things. When I run I get a

TypeError: 'type' object is not subscriptable 

Error. How can I get this to work?

m1 = pygame.image.load(dict[1]) m2 = pygame.image.load(dict[2]) m3 = pygame.image.load(dict[3]) dict = {1: "walk1.png", 2: "walk2.png", 3: "walk3.png"} playerxy = (375,130) window.blit(m1, (playerxy)) 
1

4 Answers

Normally Python throws NameError if the variable is not defined:

>>> d[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'd' is not defined 

However, you've managed to stumble upon a name that already exists in Python.

Because dict is the name of a built-in type in Python you are seeing what appears to be a strange error message, but in reality it is not.

The type of dict is a type. All types are objects in Python. Thus you are actually trying to index into the type object. This is why the error message says that the "'type' object is not subscriptable."

>>> type(dict) <type 'type'> >>> dict[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'type' object is not subscriptable 

Note that you can blindly assign to the dict name, but you really don't want to do that. It's just going to cause you problems later.

>>> dict = {1:'a'} >>> type(dict) <class 'dict'> >>> dict[1] 'a' 

The true source of the problem is that you must assign variables prior to trying to use them. If you simply reorder the statements of your question, it will almost certainly work:

d = {1: "walk1.png", 2: "walk2.png", 3: "walk3.png"} m1 = pygame.image.load(d[1]) m2 = pygame.image.load(d[2]) m3 = pygame.image.load(d[3]) playerxy = (375,130) window.blit(m1, (playerxy)) 
0

you should update to python >= 3.9 and everything will work well

You might think you are running python3.9+ but are not, check with python --version.

If this error is the result of running pytest, it may be that you are picking up pytest in the global environment and it is invoking an older version of python, instead of python3.9+ in your virtual environment. The fix for this being install pytest in your virtual environment.