2011-03-12 15 views
15

He visto esto en un par de secuencias de comandos de python que he estado leyendo últimamente. He visto el documento; solo dan ejemplos sobre cómo pasar un valor de terminación o una cadena de algún tipo.¿Qué significa esto salir (main())

Creo que lo que hace es llamar al método principal, ¿luego salir?

Si alguien pudiera arrojar algo de luz sobre esto, lo agradecería.

if __name__ == "__main__": 
    exit (main()) 

favor y gracias

+1

¿Qué línea te produce más curiosidad? –

+1

@Chris pregunta título :) – myusuf3

Respuesta

16

Esto va a llamar a la función y cuando main() principales acabados, sino que terminará dando al sistema el código de retorno que es el resultado de main().

Un ejemplo simplificado, donde esto podría ser utilizado:

def main(): 
    try: 
     doSomething() 
     return 0 
    except: 
     return 1 


if __name__ == "__main__": 
    exit (main()) 


Si un valor de retorno explícito no se da en main(), se devolverá el valor predeterminado de None. Esto produce el mismo código de retorno del sistema que especifica explícitamente return 0. Si main devuelve algo que no sea un número entero o None, se generará un código de retorno del sistema de 1.

+0

tenga en cuenta que 'try' y' except' no están en mayúsculas en Python – themaninthewoods

+0

Usted es, por supuesto, correcto. (Tenga en cuenta que en StackOverview se le recomienda que edite las respuestas directamente cuando vea un error.) – amicitas

+0

Sí, excepto que StackOverflow no permite una edición de 2 caracteres. Lo intenté. De ahí el comentario. – themaninthewoods

3

Significa ejecutar la función main() y salir con el código de retorno devuelto por la función main(). Es una expresión común para que, al ejecutar un script desde el shell, pueda determinar de manera confiable si se superó.

La expresión if __name__ == '__main__': es una forma común de ejecutar código solo cuando un módulo se ejecuta como un script (en lugar de importarse).

4

Porque si main() contiene una llamada a sys.exit() saldrá del intérprete.

La razón para hacer esto es usar el valor de retorno de main() como el código de retorno de los scripts.

15

Si ejecuta directamente una secuencia de comandos de Python, __name__ se establece en , pero si import lo hace desde otra secuencia de comandos, no lo está.

Por lo tanto, en este caso, el script ve si lo está ejecutando directamente. Si es así, llama a la función main() para realizar algún trabajo y devuelve el valor de retorno de la función main() al sistema a través del exit(). Si la secuencia de comandos se está importando desde otro módulo, no ejecuta la función main() y simplemente proporciona las funciones y clases de la secuencia de comandos en la secuencia de comandos ing import.

Esta es una expresión común en Python. Le permite tener scripts que son programas independientes, pero también puede ser import ed sin intentar hacer el trabajo que la secuencia de comandos import ing no quiere que se haga.

1

Simplemente añadiendo un ejemplo para el tipo de secuencias de comandos mencionados en la pregunta:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import re 
import sys 

from youtube_dl import main 

if __name__ == '__main__': 
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) 
    sys.exit(main()) 

Esto es de paquete youtube-dl, donde otra función main ha sido importada desde youtube_dl módulo.Tenga en cuenta que esto no debe confundir con "__name__ se establece en __main__" al ejecutar el script directamente como @Chris señaló. En general, exit(main()) podría utilizarse para hacer que el script se ejecute prolijamente.

Cuestiones relacionadas