2009-07-10 15 views
7

Comprobando si __name__ == '__main__' es un modismo común para ejecutar algún código cuando el archivo se está llamando directamente, en lugar de a través de un módulo.¿Cuáles son los diferentes valores posibles para __name__ en un script de Python, y qué significan?

En el proceso de escribir un comando personalizado para manage.py de Django, me encontré que necesitaba usar code.InteractiveConsole, que da el efecto al usuario de un shell python estándar. En algún código de prueba que estaba haciendo, encontré que en el script que estoy tratando de ejecutar, obtengo que __name__ es __console__, lo que hizo que mi código (dependiente de __main__) no se ejecutara.

Estoy bastante seguro de que tengo algunas cosas en mi implementación original para cambiar, pero me hizo preguntarme qué cosas diferentes __name__ podrían ser. No pude encontrar ninguna documentación sobre los valores posibles, ni lo que significan, así es como terminé aquí.

Respuesta

6

del document de code.InteractiveInterpreter clase ([locales]):
El argumento locales opcional especifica el diccionario en el que se ejecutará el código; el valor predeterminado es un diccionario creado recientemente con la clave '__name__' establecida en '__console__' y la clave '__doc__' establecida en None. quizá u puede turnning el argumento de los locales, establecer __name__ con __main__, o cambiar la cláusula de prueba desde

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

espero que ayude.

+0

@ S.Lott, gracias por la ayuda! – sunqiang

+1

Probablemente no necesite el conjunto() o lista, podría usar una sola tupla de cadenas. –

+0

@GringoSuave de acuerdo, :) – sunqiang

4

__name__ es generalmente el nombre del módulo, pero se ha cambiado a '__main__' cuando el módulo en cuestión se ejecuta directamente en lugar de ser importado por otro.

Entiendo que otros valores solo se pueden establecer directamente por el código que está ejecutando.

+1

Consulte http://docs.python.org/reference/toplevel_components.html para obtener información adicional. '__name__' ES el nombre del módulo. '__main__' es un módulo especial. –

Cuestiones relacionadas