Câu trả lời:
Hãy để tôi cung cấp một số thông tin về họ:
quit()
chỉ đơn giản là tăng SystemExit
ngoại lệ.
Hơn nữa, nếu bạn in nó, nó sẽ đưa ra một thông báo:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>>
Chức năng này được bao gồm để giúp những người không biết Python. Rốt cuộc, một trong những điều rất có thể một người mới sẽ cố gắng thoát khỏi Python đang gõ vào quit
.
Tuy nhiên, khôngquit
nên được sử dụng trong mã sản xuất. Điều này là do nó chỉ hoạt động nếu mô-đun được tải. Thay vào đó, chức năng này chỉ nên được sử dụng trong trình thông dịch.site
exit()
là bí danh cho quit
(hoặc ngược lại). Chúng tồn tại cùng nhau chỉ đơn giản là để Python thân thiện hơn với người dùng.
Hơn nữa, nó cũng cung cấp một thông điệp khi được in:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
>>>
Tuy nhiên, như quit
, exit
được coi là xấu khi sử dụng trong mã sản xuất và nên được dành riêng để sử dụng trong trình thông dịch. Điều này là do nó quá phụ thuộc vào các site
mô-đun.
sys.exit()
cũng đưa ra SystemExit
ngoại lệ. Điều này có nghĩa là nó giống như quit
và exit
trong khía cạnh đó.
Tuy nhiên, không giống như hai cái đó, sys.exit
được coi là tốt để sử dụng trong mã sản xuất. Điều này là do các sys
mô-đun sẽ luôn ở đó.
os._exit()
thoát khỏi chương trình mà không gọi xử lý dọn dẹp, đỏ bừng bộ đệm stdio, vv . Vì vậy, nó không phải là một cách tiêu chuẩn để thoát ra và chỉ nên được sử dụng trong những trường hợp đặc biệt. Phổ biến nhất trong số này là trong quá trình con được tạo bởi os.fork
.
Lưu ý rằng, trong bốn phương thức được đưa ra, chỉ có phương pháp này là duy nhất trong những gì nó làm.
Tổng kết, cả bốn phương thức thoát khỏi chương trình. Tuy nhiên, hai cái đầu tiên được coi là xấu khi sử dụng trong mã sản xuất và cái cuối cùng là một cách bẩn thỉu, không chuẩn, chỉ được sử dụng trong các tình huống đặc biệt. Vì vậy, nếu bạn muốn thoát một chương trình bình thường, hãy thực hiện theo phương pháp thứ ba : sys.exit
.
Hoặc, thậm chí tốt hơn theo quan điểm của tôi, bạn có thể chỉ cần làm trực tiếp những gì sys.exit
đằng sau hậu trường và chạy:
raise SystemExit
Bằng cách này, bạn không cần phải nhập sys
trước.
Tuy nhiên, sự lựa chọn này chỉ đơn giản là một phong cách và hoàn toàn phụ thuộc vào bạn.
quit
và exit
bỏ vỏ trong khi sys.exit
không.
sys.exit()
không phải là một cách đáng tin cậy để đóng cửa. Nếu nó được gọi bên trong một luồng, nó sẽ chỉ chấm dứt luồng đó trừ khi nó nằm trong luồng chính. Điều này có thể dẫn đến rất nhiều trường hợp chương trình tiếp tục vì cuộc gọi không nằm trong luồng chính, đặc biệt là khi một số thông dịch viên sẽ vô hình gọi các cuộc gọi.
end
lệnh mà sẽ raise SystemExit
. Đừng xem tại sao không thể có thứ gì đó đơn giản như thế, như trong BASIC.
print
được thay đổi từ một câu lệnh thành một hàm. Thật dễ dàng để thêm cú pháp, nhưng có một chi phí phức tạp để làm như vậy.
sys.exit()
?
Các hàm * quit()
, exit()
và sys.exit()
chức năng theo cùng một cách: chúng đưa ra SystemExit
ngoại lệ. Vì vậy, không có sự khác biệt thực sự, ngoại trừ sys.exit()
luôn luôn có sẵn exit()
và quit()
chỉ có sẵn nếu site
mô-đun được nhập khẩu.
Các os._exit()
chức năng rất đặc biệt, nó thoát ngay lập tức mà không gọi bất kỳ chức năng dọn dẹp (nó không đệm tuôn ra, ví dụ). Điều này được thiết kế cho các trường hợp sử dụng chuyên môn cao ... về cơ bản, chỉ ở trẻ sau một os.fork()
cuộc gọi.
Sử dụng exit()
hoặc quit()
trong REPL.
Sử dụng sys.exit()
trong các kịch bản, hoặc raise SystemExit()
nếu bạn thích.
Sử dụng os._exit()
cho các tiến trình con để thoát sau khi gọi đến os.fork()
.
Tất cả những điều này có thể được gọi mà không có đối số hoặc bạn có thể chỉ định trạng thái thoát, ví dụ: exit(1)
hoặc raise SystemExit(1)
thoát với trạng thái 1. Lưu ý rằng các chương trình di động bị giới hạn để thoát mã trạng thái trong phạm vi 0-255, nếu bạn raise SystemExit(256)
trên nhiều hệ thống, điều này sẽ bị cắt ngắn và quá trình của bạn sẽ thực sự thoát với trạng thái 0.
* Trên thực tế, quit()
và exit()
là các đối tượng thể hiện có thể gọi được, nhưng tôi nghĩ việc gọi chúng là các hàm là ổn.
os._exit()
:
exit(0)
:
exit(1)
:
sys.exit()
:
quit()
:
Về cơ bản tất cả họ đều làm điều tương tự, tuy nhiên, nó cũng phụ thuộc vào những gì bạn đang làm nó cho.
Tôi không nghĩ bạn bỏ bất cứ thứ gì ra ngoài và tôi khuyên bạn nên làm quen với quit()
hoặc exit()
.
Bạn sẽ sử dụng sys.exit()
và os._exit()
chủ yếu nếu bạn đang sử dụng các tệp lớn hoặc đang sử dụng python để điều khiển thiết bị đầu cuối.
Mặt khác chủ yếu sử dụng exit()
hoặc quit()
.
sys.exit
là cách chính tắc để thoát.
Trong nội bộ sys.exit
chỉ tăng SystemExit
. Tuy nhiên, gọi sys.exit
là thành ngữ hơn là SystemExit
trực tiếp nâng cao .
os.exit
là một cuộc gọi hệ thống cấp thấp thoát trực tiếp mà không gọi bất kỳ trình xử lý dọn dẹp nào.
quit
và exit
chỉ tồn tại để cung cấp một cách dễ dàng thoát khỏi dấu nhắc Python. Điều này dành cho người dùng mới hoặc người dùng vô tình nhập dấu nhắc Python và không muốn biết đúng cú pháp. Họ có khả năng thử gõ exit
hoặc quit
. Mặc dù điều này sẽ không thoát khỏi trình thông dịch, nhưng ít nhất nó sẽ đưa ra một thông báo cho họ biết lối thoát:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
Đây thực chất chỉ là một bản hack sử dụng thực tế là trình thông dịch in ra __repr__
bất kỳ biểu thức nào bạn nhập tại dấu nhắc.
os.abort()