Python NameError only when accessing class attribute in class namespace within list comprehension

Viewed 26

For the following code:

class Test:
    BAR = 'world'
    FOO1 = "%s" % BAR
    FOO2 = ["%s" % BAR for _ in range(1)]

I get the following error:

Traceback (most recent call last):
  File "<redacted>", line 1, in <module>
    class Test:
  File "<redacted>", line 4, in Test
    FOO2 = ["%s" % BAR for _ in range(1)]
  File "<redacted>", line 4, in <listcomp>
    FOO2 = ["%s" % BAR for _ in range(1)]
NameError: name 'BAR' is not defined

Notice from the traceback that the error only occurs when accessing BAR from within a list comprehension - this is very puzzling as I would assume a list comprehension would share the scope it was called from, so I have two questions:

  • why is this happening?
  • is there any way to accomplish this? ie using a class attribute in a list comprehension to declare another class attribute?

This is on CPython 3.9

0 Answers
Related