2009-06-04 77 views
5

Bạn sử dụng lệnh nào trong python để chấm dứt một chương trình?Chấm dứt Chương trình Python

tức là tương đương với "kết thúc" cơ bản hoặc "thoát" trong BASH.

Tôi thấy rằng "ngắt" sẽ đưa bạn ra khỏi vòng lặp và "thoát" là tất cả được gắn liền với nội dung "lớp" mà tôi chưa hiểu. tôi đã cố gắng

import sys 
sys.exit() 

nhưng nó sẽ hiển thị lỗi sau:

Traceback (most recent call last): 
    File "C:\Documents and Settings\....\Desktop\current file_hand\Python_1.py", line 131, in <module> 
    sys.exit() 
SystemExit 

là có bất kỳ giải pháp cho nó.

+0

Bạn đang sử dụng Python tương tác? Từ dấu nhắc >>>? Hoặc chạy một kịch bản? –

+0

Có thể có một IDE - IDLE hoặc ActivePython - bắt tất cả mọi thứ, vì chúng chạy các tập lệnh của bạn trong quá trình. –

Trả lời

10

sys.exit (error_code)

ERROR_CODE sẽ là 0 cho một lối ra bình thường, 1 hoặc một số số dương khác cho một lối ra do lỗi của một số loại, ví dụ người dùng đã nhập sai thông số.

sys.exit() "là undefined trên một số kiến ​​trúc", (mặc dù nó làm việc khi tôi thử nó trên hộp Linux của tôi!)

Các official python docs giải thích điều này hơn hoàn toàn.

Đó là một ý tưởng cực kỳ tốt cho tất cả các chương trình và tập lệnh của bạn tuân thủ quy ước trả về.

Ví dụ: nếu bạn chạy tập lệnh lấy dữ liệu ra khỏi cơ sở dữ liệu; trở về 0 và không có đầu ra, có nghĩa là cơ sở dữ liệu là hoàn toàn tốt đẹp không có gì trong đó (hoặc không có gì phù hợp với truy vấn của bạn). trở về 1 và không có đầu ra có nghĩa là có lỗi với cơ sở dữ liệu, toàn bộ quá trình nên hủy bỏ, bởi vì để tiếp tục sẽ làm hỏng hệ thống khác nữa.

1

Thử chạy trình thông dịch python ra khỏi IDE của bạn. Trong cài đặt Windows của tôi dòng lệnh đơn giản python.exe, cả hai lựa chọn làm việc:

>>> import sys 
>>> sys.exit() 

hoặc

>>> raise SystemExit 
10

sys.exit() làm tăng SystemExit ngoại lệ.

Nếu bạn không bắt ngoại lệ đó, chương trình sẽ kết thúc.

Vì bạn đang nhận ra rằng, tôi không chắc chắn những gì đang xảy ra, nhưng tôi đoán rằng bạn đang bắt tất cả các trường hợp ngoại lệ và in chúng mình:

try: 
    ... 
except: 
    print exception somehow 
    raise 

Nếu đó là trường hợp, don' t làm điều đó. bắt Exception thay vì:

... 
    except Exception: 
     ... 

Bằng cách đó bạn sẽ không bắt mọi thứ không có nghĩa là để được đánh bắt (như SystemExit).

+0

Điều này đúng với Python 2.5+. Tuy nhiên, SystemExit không thừa kế từ ngoại lệ trong Python 2.4 và trước đó. – Miles

+0

Không bao giờ bắt 'Exception' trong mã xử lý lỗi, thay vào đó bắt' StandardError', từ đó tất cả các ngoại lệ lỗi thừa kế (vì ít nhất là v2.0: http://docs.python.org/release/2.0/lib/module- exceptions.html). – RobM

2

import sys

sys.exit (0)

7

Bạn cũng nên cân nhắc lựa chọn thay thế để thoát trực tiếp.Thường thì return cũng hoạt động tốt nếu bạn quấn mã trong một hàm. (Tốt hơn, trên thực tế, bởi vì nó tránh sys.exit() weirdness.)

def main(): 
    ...do something... 
    if something: 
     return    # <----- return takes the place of exit 
    ...do something else... 

main() 
+2

+1 bằng cách sử dụng câu lệnh trả lại thay thế. Sử dụng câu lệnh return (có hoặc không có giá trị trả về) có nghĩa là chương trình python của bạn có thể được sử dụng từ bên trong một phiên tương tác, hoặc như một phần của một số tập lệnh khác. Tôi nhận được rất khó chịu tại các kịch bản gọi sys.exit và đưa tôi ra khỏi trình thông dịch Python. –

+0

+1: Tôi không bao giờ sử dụng sys.exit bản thân mình. – nosklo

1

Trong trường hợp của bạn, lỗi của bạn có khả năng là bạn có một trần trừ khối đó đang thu hút sự ngoại lệ SystemExit, như thế này:

import sys 
try: 
    sys.exit(return_code) 
except: 
    pass 

cách đúng để khắc phục vấn đề của bạn là để loại bỏ các trừ: phần, và thay vào đó chỉ cần nắm bắt các ngoại lệ mà bạn mong muốn được có thể nâng lên. Ví dụ:

try: 
    # Code which could raise exceptions 
except (NameError, ValueError): 
    # Do something in case of NameError or ValueError, but 
    # ignore other exceptions (like SystemExit) 

Tuy nhiên, nếu bạn thực sự muốn chương trình của bạn để thoát, đoạn code sau sẽ làm việc:

import os 
try: 
    os._exit(return_code) 
except: 
    pass 

này sẽ thoát ngay cả với các trừ: khoản, vì nó chỉ trực tiếp gọi hàm C cùng tên giết chết quá trình của bạn. Đây là không được đề xuất trừ khi bạn biết bạn đang làm gì, vì điều này sẽ không gọi trình xử lý dọn dẹp hoặc xóa bộ đệm IO mở.

2
sys.exit() #to exit the program 
return  #to exit from a function 
Các vấn đề liên quan