Trong Python, có hai hàm được đặt tên tương tự exit()
và sys.exit()
. Sự khác biệt là gì và khi nào tôi nên sử dụng cái này hơn cái kia?
Trong Python, có hai hàm được đặt tên tương tự exit()
và sys.exit()
. Sự khác biệt là gì và khi nào tôi nên sử dụng cái này hơn cái kia?
Câu trả lời:
exit
là một trợ giúp cho vỏ tương tác - sys.exit
được thiết kế để sử dụng trong các chương trình.
Các
site
mô-đun (được nhập khẩu tự động trong quá trình khởi động, trừ khi các-S
tùy chọn dòng lệnh được đưa ra) cho biết thêm một vài hằng số để được xây dựng trong không gian tên (ví dụexit
) . Chúng rất hữu ích cho trình thông dịch tương tác và không nên được sử dụng trong các chương trình .
Về mặt kỹ thuật, họ làm hầu hết giống nhau: nuôi SystemExit
. sys.exit
làm như vậy trong 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;
}
While exit
được định nghĩa trong site.py và _sitebuiltins.py , tương ứng.
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')
Lưu ý rằng có một tùy chọn thoát thứ ba, cụ thể là os._exit , thoát ra mà không gọi trình xử lý dọn dẹp, xóa bộ đệm stdio, v.v. (và thường chỉ nên được sử dụng trong quy trình con sau a fork()
).
from module import *
.
Nếu tôi sử dụng exit()
trong một mã và chạy nó trong trình bao, nó sẽ hiển thị một thông báo hỏi liệu tôi có muốn giết chương trình hay không. Nó thực sự đáng lo ngại.
Xem tại đây
Nhưng sys.exit()
là tốt hơn trong trường hợp này. Nó đóng chương trình và không tạo bất kỳ hộp thoại nào.
sys.exit()
nên được sử dụng trong các chương trình.
-S
được sử dụng. Một cách để làm cho nó hoạt động ngay cả với-S
là chỉ địnhfrom sys import *
.