Завершение программы Python - PullRequest
6 голосов
/ 04 июня 2009

Какую команду вы используете в python для завершения программы?

т.е. эквивалент «конца» в основном или «бросить» в BASH.

Я вижу, что "break" выводит вас из цикла, а "quit" все связано с "классными" вещами, которые я еще не понимаю. я пытался

import sys
sys.exit()

но будет отображаться следующая ошибка:

Traceback (most recent call last):
  File "C:\Documents and Settings\....\Desktop\current file_hand\Python_1.py", line 131, in <module>
    sys.exit()
SystemExit

есть ли решение для этого.

Ответы [ 7 ]

12 голосов
/ 04 июня 2009

sys.exit() вызывает исключение SystemExit.

Если вы не поймете это исключение, программа завершится.

Поскольку вы получаете этот вывод, я не уверен, что происходит, но я предполагаю, что вы перехватываете все исключения и печатаете их сами:

try:
    ...
except:
    print exception somehow
    raise

Если это так, не делай этого. поймать Exception вместо:

...
    except Exception:
        ...

Таким образом, вы не поймаете вещи, которые не должны быть пойманы (например, SystemExit).

11 голосов
/ 04 июня 2009

sys.exit (код_ошибки)

Код ошибки будет 0 для нормального выхода, 1 или другое положительное число для выхода из-за какой-либо ошибки, например, пользователь ввел неправильные параметры.

sys.exit () "не определено на некоторых архитектурах", (хотя это работало, когда я пробовал это на моем компьютере с Linux!)

Официальные документы по питону 1008 * объясняют это более полно.

Это очень хорошая идея для всех ваших программ и сценариев следовать соглашению кода возврата; 0 для ОК, что-то еще для ошибки, (обычно 1)

Например, если вы запускаете скрипт, который извлекает некоторые данные из базы данных; возврат 0 и отсутствие вывода означает, что база данных в порядке, в ней просто ничего нет (или ничего не соответствует вашему запросу). возвращение 1 и отсутствие вывода означает, что с базой данных произошла ошибка, весь процесс должен быть прерван, потому что продолжение повредит и другую систему.

8 голосов
/ 05 июня 2009

Вам также следует рассмотреть альтернативы непосредственному выходу. Часто return работает так же хорошо, если вы заключаете код в функцию. (На самом деле лучше, потому что он избегает странностей sys.exit ().)

def main():
    ...do something...
    if something:
        return               # <----- return takes the place of exit
    ...do something else...

main()
3 голосов
/ 15 января 2013
sys.exit() #to exit the program
return     #to exit from a function
2 голосов
/ 04 июня 2009

import sys

sys.exit (0)

1 голос
/ 05 июня 2009

В вашем случае ваша ошибка, вероятно, состоит в том, что у вас есть пустой блок кроме, который перехватывает исключение SystemExit, например:

import sys
try:
  sys.exit(return_code)
except:
  pass

Правильный способ решить вашу проблему - удалить часть , за исключением: , и вместо этого просто перехватить исключения, которые, как вы ожидаете, будут подняты. Например:

try:
  # Code which could raise exceptions
except (NameError, ValueError):
  # Do something in case of NameError or ValueError, but
  # ignore other exceptions (like SystemExit)

Однако, если вы действительно хотите, чтобы ваша программа вышла, будет работать следующий код:

import os
try:
  os._exit(return_code)
except:
  pass

Это завершится даже с , за исключением: , поскольку он просто напрямую вызывает функцию C с тем же именем, которая убивает ваш процесс. Это не рекомендуется , если вы не знаете, что делаете, так как это не вызовет обработчиков очистки или очистки открытых буферов ввода-вывода.

1 голос
/ 04 июня 2009

Попробуйте запустить интерпретатор python из вашей IDE. В моей установке Windows простая командная строка python.exe, обе опции работают:

>>> import sys
>>> sys.exit()

или

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