2012-03-16 45 views
76

Để thoát khỏi dòng lệnh Python, tôi phải nhập exit(). Nếu tôi gõ exit, nó nóiThoát khỏi dòng lệnh python

Use exit() or Ctrl-Z plus Return to exit 

Thông thường khi bạn gõ exit, bạn sẽ muốn thoát khỏi chương trình. Tại sao thông dịch viên lại cho tôi biết lỗi trên khi biết tôi đang cố gắng thoát khỏi dòng lệnh? Tại sao nó không chỉ thoát? Tôi biết nó không quan trọng và câu hỏi ngớ ngẩn của nó nhưng tôi tò mò.

+0

Nó có thể có để làm với cách các chức năng thường được gọi với '()' ở cuối ... nếu không, nó có thể (có thể) là một biến ... hoặc một số loại đối tượng ... – summea

+0

đúng nhưng thông dịch viên biết rằng tôi đang cố thoát ra và đó là lý do tại sao in thông báo đó. nếu không nó sẽ in một thông báo lỗi. Nếu nó biết tôi đang cố gắng thoát ra, nó chỉ có thể thoát ra. – Ank

Trả lời

27

Khi bạn nhập exit trong dòng lệnh, nó sẽ tìm biến có tên đó và gọi __repr__ (hoặc __str__) trên đó. Thông thường, bạn sẽ nhận được một kết quả như:

<function exit at 0x00B97FB0> 

Nhưng họ đã quyết định để xác định lại chức năng cho đối tượng exit để hiển thị một thông điệp hữu ích để thay thế. Cho dù đó có phải là hành vi ngu ngốc hay không, là một câu hỏi chủ quan, nhưng có thể một lý do tại sao nó không "chỉ thoát" là:

Giả sử bạn đang xem một số mã trong trình gỡ lỗi, ví dụ một trong các đối tượng tham chiếu hàm exit. Khi trình gỡ lỗi cố gắng gọi __repr__ trên đối tượng đó để hiển thị chức năng đó cho bạn, chương trình đột nhiên dừng lại! Điều đó sẽ thực sự bất ngờ, và các biện pháp để chống lại điều đó có thể làm phức tạp thêm (ví dụ, ngay cả khi bạn giới hạn hành vi đó đối với dòng lệnh, nếu bạn cố gắng in một số đối tượng có exit làm thuộc tính?)

+3

Trong trường hợp này, chức năng thoát thực không nằm trong phạm vi trừ khi bạn 'nhập sys', sau đó bạn sẽ gọi sys.exit() để thoát trình thông dịch. –

13

Tôi khuyên bạn nên thoát trình thông dịch Python bằng Ctrl-D. Đây là mã ASCII cũ cho phần cuối của tệp hoặc kết thúc truyền.

+0

Cách duy nhất hiệu quả với tôi ... –

+0

Dường như phương pháp này không hoạt động nếu tập lệnh bị lỗi. – blaylockbk

7

Trong trình thông dịch trăn của tôi exit thực sự là một chuỗi chứ không phải chức năng - 'Use Ctrl-D (i.e. EOF) to exit.'. Bạn có thể kiểm tra thông dịch viên của mình bằng cách nhập type(exit)

Trong python hoạt động những gì đang xảy ra là thoát là một hàm. Nếu bạn không gọi hàm, nó sẽ in ra biểu diễn chuỗi của đối tượng. Đây là hành vi mặc định cho bất kỳ đối tượng nào được trả về. Nó chỉ là các nhà thiết kế nghĩ rằng mọi người có thể cố gắng gõ lối ra để thoát khỏi thông dịch viên, vì vậy họ đã thực hiện chuỗi đại diện của chức năng thoát một thông điệp hữu ích. Bạn có thể kiểm tra hành vi này bằng cách nhập str(exit) hoặc thậm chí print exit.

+1

Đó là từ Active Python. – Ank

+4

Ctrl-Z là những gì bạn làm trên Windows (tốt, DOS), nơi bạn sẽ làm Ctrl-D trên các hệ thống giống Unix. –

+0

@KarlKnechtel Ah, rất vui được biết. Tôi có ít kinh nghiệm lập trình trên các cửa sổ. – Dunes

16

Thông báo này là __str__ thuộc tính của exit

xem những ví dụ:

>>> print exit 
Use exit() or Ctrl-D (i.e. EOF) to exit 
>>> exit.__str__() 
'Use exit() or Ctrl-D (i.e. EOF) to exit' 
>>> getattr(exit, '__str__')() 
'Use exit() or Ctrl-D (i.e. EOF) to exit' 
7

Vì trình thông dịch không phải là trình bao mà bạn cung cấp các lệnh, đó là - một thông dịch viên. Những thứ mà bạn cung cấp cho nó là mã Python.

Cú pháp của Python là như vậy mà tự nó không thể là bất kỳ điều gì khác ngoài tên cho một đối tượng. Chỉ đơn giản là đề cập đến một đối tượng không thể thực sự làm bất cứ điều gì (ngoại trừ những gì vòng lặp đọc-eval-in thường làm, tức là hiển thị một chuỗi đại diện của đối tượng).

27

Điều này phù hợp với tôi, cách tốt nhất để thoát khỏi dấu nhắc python.

exit()

Các vấn đề liên quan