W języku Python istnieją dwie funkcje o tej samej nazwie, exit()
i sys.exit()
. Jaka jest różnica i kiedy należy korzystać z jednej na drugiej?Różnica między wyjściami() i sys.exit() w języku Python
Odpowiedz
exit
jest pomocnikiem dla powłoki interaktywnej - sys.exit
jest przeznaczona do stosowania w programach.
Moduł
site
(który jest importowany automatycznie podczas uruchamiania systemu, chyba że opcja wiersza polecenia-S
jest podana) dodaje kilka stałych do wbudowanego w przestrzeni nazw (npexit
). Są one użyteczne dla powłoki interpretera interaktywnego i nie powinny być używane w programach.
Technicznie, robią przeważnie takie same: podnoszenie SystemExit
. sys.exit
czyni to w sysmodule.c:
static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
PyObject *exit_code = 0;
if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
return NULL;
/* Raise SystemExit so callers may catch it or clean up. */
PyErr_SetObject(PyExc_SystemExit, exit_code);
return NULL;
}
Podczas exit
jest zdefiniowana w site.py:
class Quitter(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')
Należy pamiętać, że jest jeszcze trzecia opcja wyjścia, mianowicie os._exit, który wychodzi bez wywoływania procedur obsługi czyszczenia, spłukiwania bufory stdio itp. (i które normalnie powinny być używane tylko w procesie potomnym po fork()
).
Jeśli użyję exit()
w kodzie i uruchomię go w powłoce, wyświetli się komunikat z pytaniem, czy chcę zabić program, czy nie. To naprawdę niepokojące. See here
Ale w tym przypadku jest lepiej sys.exit()
. Zamyka program i nie tworzy żadnego okna dialogowego.
- 1. Różnica między floatem w języku Python i numpy float32
- 2. różnica między python 2.7.3 i python 3.3
- 3. Jak korzystać sys.exit() to Python
- 4. Różnica między dict.clear() i przypisywanie {} w Python
- 5. Różnica między wyjściem (0) a wyjściem (1) w języku Python
- 6. Jaka jest różnica między sys i os.sys
- 7. Podczas wywoływania skryptu w języku Python, jaka jest różnica między "./script.py" i "python script.py"
- 8. Różnica między "i" w Lua
- 9. Różnica między strumieniami w języku Java 8 i strumieniami równoległymi
- 10. Różnica między ciągami pojedynczymi i podwójnymi cudzysłowami w języku ActionScript
- 11. Kończenie programu w języku Python
- 12. Różnica między wydajnością w Pythonie i wydajnością w C#
- 13. Różnica w języku Python między drukowaniem obj i drukowaniem obj .__ str__() [co najmniej z Unicode?]
- 14. Jak dodać spację między dwoma wyjściami?
- 15. Integer różnica w python między dwiema datami
- 16. Dni między dwiema datami w języku Python
- 17. Różnica między odniesienia i wskaźników
- 18. Jaka jest różnica między int() i floor() w Pythonie 3?
- 19. Jaka jest różnica między Image.resize i Image.thumbnail w Pillow-python
- 20. Jaka jest różnica między json.dump() i json.dumps() w python?
- 21. W python, jaka jest różnica między random.uniform() i random.random()?
- 22. różnica między eq i == w JSP
- 23. Różnica między Bytearray i List w Pythonie
- 24. Różnica między qt i PyQt4
- 25. Różnica między $ @ i $! w perl
- 26. Różnica między PyMODINIT_FUNC i PyModule_Create
- 27. Różnica między DatagramSocket i DatagramChannel
- 28. Różnica między | i || lub & i && dla porównania
- 29. MySQL: Różnica między ",", "i"
- 30. Composer.phar różnica między | i ||
Podejrzewam, że wyjście (main()) jest pospolitym idiomem, ponieważ ludzie nie odbierają * nie powinny być używane w programach * uwaga. Działa dobrze, chyba że użyto ['-S'] (http://docs.python.org/using/cmdline.html#cmdoption-S). Sposobem na jego działanie nawet przy '-S' jest określenie' from sys import * '. – nobar
@nobar, prawda, ale tak naprawdę nie chcesz używać 'from module import *'. – miku
Więc w jaki sposób 'SystemExit' jest podniesiony w innych wątkach? Czy to nawet? –