2012-02-24 34 views
90

Sự khác nhau giữa exit(0)exit(1) bằng Python là gì?Sự khác biệt giữa lối ra (0) và thoát (1) trong Python

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

+7

Đây là liên kết tới ['exit()' trong tài liệu] (https://docs.python.org/3/library/constants.html# hằng số-by-the-site-module), mà đã cho tôi mãi mãi để tìm. –

+2

lưu ý: ['Mô-đun trang (được nhập tự động trong khi khởi động, trừ khi tùy chọn dòng lệnh -S được cung cấp) thêm một số hằng số vào không gian tên dựng sẵn. Chúng 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'] (https://docs.python.org/3/library/constants.html#constants-added-by-the-site-module), thay vào đó , sử dụng ['sys.exit()'] (https://docs.python.org/2/library/sys.html#sys.exit) – Udi

+0

Chỉ cần nhận ra có 'exit (0)' được thảo luận trong câu hỏi và cũng với một dấu gạch dưới '_exit (0)', sự khác biệt được giải thích [ở đây] (https://stackoverflow.com/questions/9591350/what-is-difference-between-sys-exit0-and-os- exit0) – cardamom

Trả lời

147

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

exit(0) có nghĩa là một lối ra sạch sẽ mà không cần 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 được thoát.

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

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

+4

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

+7

@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)' - ít nhất 8 bit quan trọng được chuyển tiếp đến chương trình gọi (shell hoặc bất cứ điều gì). –

15

Điều này xác định exit status của chương trình khi chương trình kết thúc chạy (thường là 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 tập lệnh Python, không quan trọng).

7

Quy ước chuẩn cho tất cả các chương trình C, bao gồm Python, là exit(0) để cho biết thành công và exit(1) hoặc bất kỳ giá trị khác không (trong khoảng 1..255) để chỉ báo lỗi. Bất kỳ giá trị nào nằm ngoài phạm vi 0..255 đượ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ì nó được coi là chưa ký.

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.

5

Số bạn chuyển đến hàm exit() đơ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 hiện 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ệ điều hành. 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ông phải là lỗi để chỉ ra lỗi. Vì vậy, nếu chương trình của bạn sẽ được chạy từ một kịch bản, một 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ư một IDE), bạn phải cẩn thận về những gì bạn quay trở lại.

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

0

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

exit(1): Điều này làm cho 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 có không đảm bảo.

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

  • EXIT_SUCCESS - chấm dứt thành công
  • EXIT_FAILURE - thất bại chấm dứt
  • 0 - giống như EXIT_SUCCESS
Các vấn đề liên quan