Có vẻ như Python hỗ trợ nhiều lệnh khác nhau để dừng thực thi tập lệnh. Các lựa chọn tôi đã tìm thấy là: quit[]
, exit[]
, sys.exit[]
, os._exit[]
The choices I've found are: quit[]
, exit[]
, sys.exit[]
, os._exit[]
Tôi đã bỏ lỡ bất kỳ? Sự khác biệt giữa họ là gì? Khi nào bạn sẽ sử dụng mỗi cái?
Jackie
20.8K31 Huy hiệu vàng135 Huy hiệu bạc269 Huy hiệu đồng31 gold badges135 silver badges269 bronze badges
Đã hỏi ngày 2 tháng 11 năm 2013 lúc 22:00Nov 2, 2013 at 22:00
Jonathan Livnijonathan LivniJonathan Livni
96.7K102 Huy hiệu vàng257 Huy hiệu bạc355 Huy hiệu Đồng102 gold badges257 silver badges355 bronze badges
1
Hãy để tôi cung cấp một số thông tin về họ:
quit[]
chỉ đơn giản là tăng ngoại lệSystemExit
.Hơn nữa, nếu bạn in nó, nó sẽ đưa ra một thông điệp:
>>> print [quit] Use quit[] or Ctrl-Z plus Return to exit >>>
Chức năng này được đưa vào để giúp những người không biết Python. Rốt cuộc, một trong những điều có thể nhất mà một người mới sẽ cố gắng thoát Python đang gõ vào ____10.
Tuy nhiên,
0 không 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>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
2 được tải. Thay vào đó, chức năng này chỉ nên được sử dụng trong phiên dịch.not be used in production code. This is because it only works if the>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
2 module is loaded. Instead, this function should only be used in the interpreter.>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
exit[]
là bí danh cho
0 [hoặc ngược lại]. Chúng tồn tại cùng nhau chỉ đơn giản là làm cho Python thân thiện hơn với người dùng.>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
Hơn nữa, nó cũng đưa ra một thông điệp khi được in:
>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
Tuy nhiên, như
0,>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
6 được coi là xấu để sử dụng trong mã sản xuất và nên được dành để sử dụng trong phiên dịch viên. Điều này là do nó quá phụ thuộc vào mô -đun>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
2.>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
sys.exit[]
cũng làm tăng ngoại lệSystemExit
. Điều này có nghĩa là nó giống như
0 và>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
6 về mặt đó.>>> print [exit] Use exit[] or Ctrl-Z plus Return to exit >>>
Tuy nhiên, không giống như hai người đó,
2 được coi là tốt để sử dụng trong mã sản xuất. Điều này là do mô -đunraise SystemExit
3 sẽ luôn ở đó.raise SystemExit
os._exit[]
Thoát khỏi chương trình mà không gọi trình xử lý dọn dẹp, bộ đệm Stdio Flushing, v.v ... Vì vậy, đây không phải là một cách tiêu chuẩn để thoát và chỉ nên được sử dụng trong các trường hợp đặc biệt. Phổ biến nhất trong số này là trong quy trình trẻ em được tạo bởi
5.without calling cleanup handlers, flushing stdio buffers, etc. Thus, it is not a standard way to exit and should only be used in special cases. The most common of these is in the child process[es] created byraise SystemExit
5.raise SystemExit
Lưu ý rằng, trong bốn phương pháp được đưa ra, chỉ có phương thức này là duy nhất trong những gì nó làm.
Tóm lại, tất cả bốn phương pháp thoát khỏi chương trình. Tuy nhiên, hai cái đầu tiên được coi là xấu để sử dụng trong mã sản xuất và cuối cùng là một cách không chuẩn, bẩn chỉ được sử dụng trong các kịch bản đặ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 đi với phương pháp thứ ba:
raise SystemExit
2.Hoặc, thậm chí tốt hơn theo ý kiến của tôi, bạn có thể làm trực tiếp những gì
raise SystemExit
2 làm đằng sau hậu trường và chạy:raise SystemExit
Bằng cách này, bạn không cần nhập
raise SystemExit
3 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 tùy thuộc vào bạn.
Mhsmith
5,8473 Huy hiệu vàng36 Huy hiệu bạc56 Huy hiệu Đồng3 gold badges36 silver badges56 bronze badges
Đã trả lời ngày 2 tháng 11 năm 2013 lúc 22:22Nov 2, 2013 at 22:22
10
Các hàm* quit[]
, exit[]
và sys.exit[]
theo cùng một cách: chúng tăng ngoại lệ SystemExit
. Vì vậy, không có sự khác biệt thực sự, ngoại trừ sys.exit[]
luôn có sẵn nhưng exit[]
và quit[]
chỉ khả dụng nếu mô -đun
>>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
2 được nhập [tài liệu].Hàm os._exit[]
là đặc biệt, nó thoát ra ngay lập tức mà không gọi bất kỳ chức năng làm sạch nào [ví dụ như không có bộ đệm xả]. Điều này được thiết kế cho các trường hợp sử dụng chuyên dụng cao ... về cơ bản, chỉ ở trẻ sau cuộc gọi
>>> exit
Use exit[] or Ctrl-D [i.e. EOF] to exit
>>> exit[]
$
8.Sự kết luận
Sử dụng
exit[]
hoặcquit[]
trong phần lại.Sử dụng
sys.exit[]
trong tập lệnh hoặcquit[]
2 nếu bạn thích.Sử dụng
os._exit[]
cho các quy trình trẻ em để thoát sau cuộc gọi đến
8.>>> exit Use exit[] or Ctrl-D [i.e. EOF] to exit >>> exit[] $
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ụ: quit[]
5 hoặc quit[]
6 để 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 trong các mã trạng thái thoát trong phạm vi 0-255, nếu bạn quit[]
7 trên nhiều Các 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.
Chú thích
* 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ĩ rằng bạn có thể gọi chúng là các chức năng.
DJVG
9.3064 Huy hiệu vàng58 Huy hiệu bạc91 Huy hiệu Đồng4 gold badges58 silver badges91 bronze badges
Đã trả lời ngày 2 tháng 11 năm 2013 lúc 22:22Nov 2, 2013 at 22:22
Các hàm* quit[]
, exit[]
và sys.exit[]
theo cùng một cách: chúng tăng ngoại lệ SystemExit
. Vì vậy, không có sự khác biệt thực sự, ngoại trừ sys.exit[]
luôn có sẵn nhưng exit[]
và quit[]
chỉ khả dụng nếu mô -đun
>>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
2 được nhập [tài liệu].Dietrich EppHàm os._exit[]
là đặc biệt, nó thoát ra ngay lập tức mà không gọi bất kỳ chức năng làm sạch nào [ví dụ như không có bộ đệm xả]. Điều này được thiết kế cho các trường hợp sử dụng chuyên dụng cao ... về cơ bản, chỉ ở trẻ sau cuộc gọi
8.36 gold badges336 silver badges411 bronze badges>>> exit
Use exit[] or Ctrl-D [i.e. EOF] to exit
>>> exit[]
$
Sự kết luận
os._exit[]
:
- Sử dụng
exit[]
hoặcquit[]
trong phần lại.
exit[]
1:
- Sử dụng
sys.exit[]
trong tập lệnh hoặcquit[]
2 nếu bạn thích.
quit[]
5:
- Sử dụng
os._exit[]
cho các quy trình trẻ em để thoát sau cuộc gọi đến
8.>>> exit Use exit[] or Ctrl-D [i.e. EOF] to exit >>> exit[] $
sys.exit[]
:
- 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ụ:
quit[]
5 hoặcquit[]
6 để 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 trong các mã trạng thái thoát trong phạm vi 0-255, nếu bạnquit[]
7 trên nhiều Các 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.
quit[]
:
- Chú thích
* 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ĩ rằng bạn có thể gọi chúng là các chức năng.
DJVG
9.3064 Huy hiệu vàng58 Huy hiệu bạc91 Huy hiệu Đồng
Dietrich Eppdietrich Epp
199K36 Huy hiệu vàng336 Huy hiệu bạc411 Huy hiệu Đồng
Phương tiện khác nhau để thoátNov 2, 2013 at 22:10
3
raise SystemExit
2 là cách kinh điển để thoát.Trong nội bộ
raise SystemExit
2 chỉ tăng SystemExit
. Tuy nhiên, gọi raise SystemExit
2is đó là thành ngữ hơn so với việc nâng SystemExit
trực tiếp.sys.exit[]
6 là một cuộc gọi hệ thống cấp thấp thoát ra trực tiếp mà không gọi bất kỳ trình xử lý dọn dẹp nào.
>>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
0 và >>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
6 chỉ tồn tại để cung cấp một cách dễ dàng ra khỏi dấu nhắc Python. Đây là 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õ >>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
6 hoặc >>> print [exit]
Use exit[] or Ctrl-Z plus Return to exit
>>>
0. Mặc dù điều này sẽ không thoát khỏi thông dịch viên, nhưng ít nhất nó cũng đưa ra một thông điệp cho họ biế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 os._exit[]
1 của bất kỳ biểu thức nào bạn nhập tại dấu nhắc.
Đã trả lời ngày 3 tháng 11 năm 2013 lúc 9:02Nov 3, 2013 at 9:02
OEFEOEFEoefe
18.7K7 Huy hiệu vàng46 Huy hiệu bạc66 Huy hiệu Đồng7 gold badges46 silver badges66 bronze badges