Каковы различные возможные значения __name__ в скрипте Python и что они означают? - PullRequest
8 голосов
/ 11 июля 2009

Проверка, является ли __name__ == '__main__' распространенной идиомой для запуска некоторого кода при непосредственном вызове файла, а не через модуль.

В процессе написания пользовательской команды для manage.py в Django я обнаружил, что мне нужно использовать code.InteractiveConsole, который дает эффект пользователю стандартной оболочки Python. В некотором тестовом коде, который я выполнял, я обнаружил, что в скрипте, который я пытаюсь выполнить, я получаю, что __name__ равно __console__, из-за чего мой код (зависит от __main__) не запускается.

Я совершенно уверен, что у меня есть некоторые вещи в моей первоначальной реализации, которые можно изменить, но меня удивило, что могут быть разные вещи __name__. Я не смог найти никакой документации о возможных значениях и их значении, поэтому я так и оказался здесь.

Ответы [ 2 ]

6 голосов
/ 11 июля 2009

из документа класса code.InteractiveInterpreter ([locals]):
Необязательный аргумент locals указывает словарь, в котором будет выполняться код; по умолчанию используется вновь созданный словарь с ключом '__name__', установленным на '__console__', и ключом '__doc__', установленным на None. возможно, вы можете включить аргумент locals, установить __name__ с помощью __main__ или изменить условие теста с

if __name__ == '__main__'
to  
if __name__ in set(["__main__", "__console__"])

Надеюсь, это поможет.

4 голосов
/ 11 июля 2009

__name__ обычно является именем модуля, но оно изменяется на '__main__', когда рассматриваемый модуль выполняется напрямую, а не импортируется другим.

Я понимаю, что другие значения могут быть установлены только кодом, который вы запускаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...