Неопределенный глобальный в выражении генератора списков с использованием python3, работает с python2, какие изменения необходимы?

class Some(object):
    tokens = [ ... list of strings ... ]
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
    ... etc ...
some = Some()

Это прекрасно работает с Python2.7. Однако python3 говорит:

Traceback (most recent call last):
File "./test.py", line 17, in <module>
    class Some(object):
File "./test.py", line 42, in Some
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
File "./test.py", line 42, in <listcomp>
    untokenized = [tokens.index(a) for a in [... some other list of strings ...]]
NameError: global name 'tokens' is not defined

Хотя я могу обойти эту проблему, я действительно хотел бы знать, в чем здесь разница между Python2 и Python3. Я прочитал документы об изменениях Python 2-> 3, но мне не удалось найти какое-либо описание, связанное с моей проблемой. Также2to3&nbsp;Инструмент не жалуется на что-либо в моем коде.

Кстати, сейчас я не могу вспомнить ситуацию, но у меня было что-то похожее с python2only&nbsp;тоже (я даже не пробовал это с 3), я думал, что это должно работать (в классе):

def some_method(self):
    return {a: eval("self." + a) for a in dir(self) if not a.startswith("_")}

Однако это вызывает выражение python2:NameError: name 'self' is not defined Я еще не пробовал это с python3, но, например, это работает:

[eval("self." + a) for a in dir(self) if not a.startswith("_")]

Если я изменю соответствующую часть предыдущего примера на этот (хорошо, сам пример немного глуп, но, по крайней мере, показывает мою проблему). Теперь мне очень любопытно, почемуself&nbsp;Кажется, не определено для этого первого примера, но это для второго? Кажется, с dicts, у меня есть похожая проблема, о которой мой первоначальный вопрос, но с выражением генератора списка это работает, но не в python3. Хммм ...

После моего python2 - & gt; 3 проблема, о которой я упомянул, поскольку все это, похоже, связано с проблемой того, что что-то не определено в соответствии с интерпретатором python (и, возможно, вторая часть моего вопроса не связана?). Я чувствую себя довольно смущенным сейчас. Пожалуйста, расскажите мне о моей ошибке (я уверен, что что-то упустил, конечно).