2010-09-28 8 views
25

Możliwe duplikaty:
Terminating a Python script
Terminating a Python ProgramPython jak wyjść Główną funkcją

Moje pytanie brzmi: w jaki sposób, aby wyjść na zewnątrz w Pythonie głównej funkcji? Próbowałem "return", ale podał błąd SyntaxError: 'return' outside function. Czy ktoś może pomóc? Dzięki.

if __name__ == '__main__': 
    try: 
    if condition: 
    (I want to exit here) 
    do something 
    finally: 
    do something 
+1

gdy szukałeś co znalazłaś? http://stackoverflow.com/search?q=%5Bpython%5D+exit. Wszystkie te wydają się mieć coś wspólnego. –

+2

Myślę, że ludzie pominęli punkt tego pytania. PO nie szuka ogólnego sposobu na zakończenie programu. Chce wiedzieć, dlaczego w tym przypadku 'return' nie działa w tym celu. – nobar

+0

Ta odpowiedź na pokrewne pytanie wydaje się najbardziej przydatna tutaj http://stackoverflow.com/a/953385/86967. – nobar

Odpowiedz

55

Możesz użyć sys.exit(), aby wyjść ze środka głównej funkcji.

Jednak nie polecam tam wykonywania żadnej logiki. Zamiast tego umieść wszystko w funkcji i wywołaj ją z poziomu __main__ - wtedy możesz normalnie używać powrotu.

+6

+1 za dodanie wyraźnej funkcji "wszystko". Ułatwia to również (1) wywoływanie tego skryptu z testu innej skrypty (2). –

+5

Guido van Rossum wspiera (lub przynajmniej przyzwyczaił się) takie podejście: http://www.artima.com/weblogs/viewpost.jsp?thread=4829 – ide

+0

Zwykle tworzę funkcję o nazwie "main" i umieszczam ją w wierzchołek pliku. –

2

stosowanie sys Moduł

import sys 
sys.exit() 
16

Nie możesz wrócić, ponieważ nie masz żadnej funkcji. Możesz jednak exit.

import sys 
sys.exit(0) 

0 (domyślnie) oznacza sukces, niezerowy oznacza awarię.

+1

Dlaczego 'sys.exit()' zamiast po prostu 'exit()'? –

+1

Dlaczego nie? Ponadto Python stara się nie udostępniać więcej wbudowanych funkcji, niż to konieczne. –

+2

@Jeżeli [docs] (http://docs.python.org/library/constants.html#exit) mówią, że nie używają zwykłego 'exit' w programach i jest to prawdopodobnie [błąd] (http: // bugs.python.org/issue8220) (aczkolwiek WONTFIX), którą możesz nawet zrobić. –

8

Jeśli nie masz ochoty na importowanie niczego, można spróbować:

raise SystemExit, 0 
+0

Czy można go złapać, jeśli ktoś chciał rozszerzyć główną i nie zakończyć na końcu? – ThorSummoner