Sự khác biệt giữa thoát (0) và thoát (1) trong Python


167

Sự khác biệt giữa exit(0)exit(1)trong Python là gì?

Tôi đã cố gắng nhìn xung quanh nhưng không tìm thấy một câu hỏi cụ thể trên những dòng này. Nếu nó đã được trả lời, một liên kết sẽ là đủ.


9
Đây là một liên kết đến exit()trong các tài liệu , mà tôi phải tìm mãi mãi.
Ryne Everett


Chỉ cần nhận ra có một exit(0)điều được thảo luận trong câu hỏi này và cũng là một câu hỏi có dấu gạch dưới _exit(0), sự khác biệt được giải thích ở đây
thảo quả

Điều thú vị về các mã này là chúng có thể được sử dụng trực tiếp trong một ifcâu lệnh trong bashtrình bao bọc, do đó, có thể thực hiện thêm hành động cho dù chương trình Python có thành công hay không hoặc có đưa ra trạng thái khác không.
SDsolar

Thật kỳ lạ, nếu 0 là Sai và 1 là Đúng trong Python, bạn sẽ nghĩ các con số có nghĩa ngược lại
Monica Heddneck

Câu trả lời:


248

0 và 1 là mã thoát.

exit(0) có nghĩa là một lối thoát sạch mà không có bất kỳ lỗi / vấn đề

exit(1) có nghĩa là có một số vấn đề / lỗi / vấn đề và đó là lý do tại sao chương trình đang thoát.

Đây không phải là cụ thể của Python và khá phổ biến. Mã thoát khác không được coi là một lối thoát bất thường và đôi khi, mã lỗi cho biết vấn đề là gì. Mã lỗi bằng không có nghĩa là thoát thành công.

Điều này hữu ích cho các chương trình khác, shell, người gọi, vv để biết những gì đã xảy ra với chương trình của bạn và tiến hành theo đó.


10
Và những gì về lối ra (-1)?
Faizan

16
@Faizan: Mã thoát là giá trị 8 bit trên Unix. Nếu bạn gọi exit(-1), giá trị tương đương với exit(255)- 8 bit có ý nghĩa nhỏ nhất được chuyển tiếp đến chương trình gọi (shell hoặc bất cứ thứ gì).
Jonathan Leffler

4
Lưu ý rằng theo các tài liệu , exit()được thêm bởi sitemô-đun, và không nên được sử dụng bởi các chương trình. Thay vào đó, hãy sử dụng sys.exit()hoặc thậm chí raise SystemExit, nếu bạn không muốn nhập mô-đun khác.
daviewales

2
Do mã thoát khỏi Unix / Linux, tôi đã nghĩ 0 là True và 1 là giá trị Sai trong các điều kiện Python.
vlyalcin

19

Điều này xác định trạng thái thoát của chương trình khi nó kết thúc chạy (nói chung, 0 cho thành công và 1 cho lỗi).

Nó không phải là duy nhất đối với Python và hiệu ứng chính xác phụ thuộc vào hệ điều hành của bạn và cách chương trình được gọi (mặc dù 99% thời gian, nếu bạn chỉ chạy các tập lệnh Python, điều đó không thành vấn đề).


12

Quy ước chuẩn cho tất cả các chương trình C, bao gồm Python, là exit(0)để biểu thị thành công và exit(1)hoặc bất kỳ giá trị khác không nào (trong phạm vi 1..255) để biểu thị sự thất bại. Bất kỳ giá trị nào nằm ngoài phạm vi 0..255 đều được xử lý modulo 256 (trạng thái thoát được lưu trữ trong giá trị 8 bit). Đôi khi, điều đó sẽ được coi là đã ký (vì vậy bạn có thể thấy -128, -127, v.v.) nhưng thông thường nó được coi là không dấu.

Trạng thái này có sẵn cho mã đã gọi Python. Quy ước này áp dụng trên các nền tảng, mặc dù ý nghĩa của trạng thái thoát khác không có thể khác nhau trên các nền tảng khác nhau.


7

Số bạn truyền cho exit()hàm chỉ đơn giản là mã trả về của chương trình, được cấp cho hệ điều hành. Từ quan điểm của chương trình của bạn, không có sự khác biệt: việc thực thi sẽ kết thúc trong cả hai trường hợp và giá trị được cung cấp cho hàm sẽ được trao cho HĐH. Nhưng một số công cụ và tập lệnh có tính đến mã thoát của chương trình. Hầu hết các công cụ trả về 0 khi chúng thành công và khác không để báo lỗi.

Vì vậy, nếu chương trình của bạn sẽ được chạy từ tập lệnh, công cụ tự động hoặc từ một số phần mềm khác có tính đến mã trả về (chẳng hạn như IDE), bạn phải cẩn thận với những gì bạn trả lại.

Khi nghi ngờ, chỉ cần trả về 0 để cho biết mọi thứ đều ổn.


6

exit(0): Điều này khiến chương trình thoát ra khi kết thúc thành công.

exit(1): Điều này khiến chương trình thoát với ý nghĩa hệ thống cụ thể.

Trên nhiều hệ thống, exit(1)báo hiệu một số loại lỗi, tuy nhiên không có gì đảm bảo.

Như tôi nhớ, tiêu chuẩn C chỉ nhận ra ba giá trị thoát tiêu chuẩn:

  • EXIT_SUCCESS - chấm dứt thành công
  • EXIT_FAILURE - chấm dứt không thành công
  • 0 -- giống như EXIT_SUCCESS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.