Thoát khỏi dòng lệnh python


152

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

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 trình thông dịch đưa ra lỗi trên cho tôi khi biết tôi đang cố thoát khỏi dòng lệnh? Tại sao nó không thoát? Tôi biết nó không thành vấn đề và đó là một câu hỏi ngớ ngẩn nhưng tôi tò mò.


Nó có thể liên quan đến cách các hàm 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 loại đối tượng nào đó ...
triệu tập

đúng nhưng người phiên dịch 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ố thoát, nó có thể thoát.
Ank

1
exit hoặc exit () đưa ra lỗi cho tôi khoảng 20% ​​cài đặt tôi đã tìm thấy trên thế giới ... Chỉ có CTRL + Z + trở lại hoạt động ổn định.
Paulo Carvalho

Câu trả lời:


37

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

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


14
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 như Unix.
Karl Knechtel

@KarlKnechtel À, thật tốt khi biết. Tôi có ít kinh nghiệm lập trình trên windows.
Cồn

60

Điều này làm việc cho tôi, cách tốt nhất để đi ra khỏi dấu nhắc python.

lối ra()


4
Tôi bối rối về câu trả lời này ... chính câu hỏi nói rằng họ đã biết rằng nó exit()hoạt động và họ muốn biết tại sao exitkhông có parens không hoạt động. Vì vậy, câu trả lời này chỉ lặp lại một phần của câu hỏi và không thực sự trả lời nó.
Ben Lee

Tôi muốn loại bỏ câu trả lời này vì đã không đọc câu hỏi, nhưng tôi cho rằng đối với hầu hết các cài đặt python thì điều này là chính xác; chỉ là người dùng nói rằng nó không hoạt động trong trường hợp của họ, vì vậy khuyến nghị nó có vẻ ... không đúng.
người27

37

Khi bạn gõ exitvào dòng lệnh, nó sẽ tìm thấy 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 exitđối tượng để hiển thị một thông điệp hữu ích thay thế. Có hay không đó là một hành vi ngu ngốc hay không, là một câu hỏi chủ quan, nhưng một lý do có thể khiến nó không "thoát ra" là:

Ví dụ, giả sử bạn đang xem một số mã trong trình gỡ lỗi và một trong các đối tượng tham chiếu exithàm. Khi trình gỡ lỗi cố gắng gọi __repr__đố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 đó 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 mọi thứ (ví dụ, ngay cả khi bạn giới hạn hành vi đó vào dòng lệnh, nếu bạn cố in một số đối tượng có exitthuộc tính thì sao?)


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

19

Thông báo này là __str__thuộc tính củaexit

hãy xem những ví dụ này :

1

>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

2

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

3

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

19

Tôi khuyên bạn nên thoát trình thông dịch Python với Ctrl-D. Đây là mã ASCII cũ để kết thúc tập tin hoặc kết thúc truyền.


Có vẻ như phương pháp này không hoạt động nếu tập lệnh gặp lỗi.
blaylockbk

2
Ctrl-Breakhoạt động ổn định trong Windows. Ctrl-Dhoặc Ctrl-Zlàm việc trong Windows cho Python 2.7, 3.4, 3.6. Nhưng trong Python 3.7, các lệnh này đã ngừng hoạt động và chuỗi ASCII ngắn nhất thoát ra là Ctrl-Z Enter.
Bob Stein

14

Với Anaconda 4.5+ và Python 3.6+ trên Windows sử dụng

Ctrl+Z

hoặc là

exit()

Trong một số trường hợp, bạn có thể phải sử dụng

Ctrl+Break

Nếu máy tính của bạn không có Breakchìa khóa thì xem tại đây .


8

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

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


6

Bạn có thể khắc phục điều đó.

Liên kết PYTHONSTARTUPđến một tập tin python với sau đây

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

Cái này hoạt động ra sao?

Dòng lệnh python là một vòng lặp đọc-đánh giá-in, đó là khi bạn gõ văn bản, nó sẽ đọc văn bản đó, đánh giá nó và cuối cùng là in kết quả.

Khi bạn gõ exit()nó sẽ ước lượng cho một đối tượng có thể gọi được của kiểu site.Quittervà gọi __call__hàm của nó sẽ thoát khỏi hệ thống. Khi bạn gõ exitnó sẽ ước lượng cho cùng một đối tượng có thể gọi được, mà không gọi nó, đối tượng được in sẽ lần lượt gọi __repr__các đối tượng.

Chúng ta có thể tận dụng lợi thế này bằng cách liên kết __repr__đến __call__và do đó có được hành vi dự kiến ​​thoát khỏi hệ thống ngay cả khi chúng ta gõ exitmà không có dấu ngoặc đơn.


4
Họ đã nỗ lực để exitin chuỗi "hữu ích", nhưng họ không thể liên kết nó để làm điều tự nhiên và thoát khỏi trình thông dịch. Bị buộc phải gõ dấu ngoặc mỗi lần là bực bội. Câu trả lời này là hoàn hảo và nên được chấp nhận thay thế.
Przemek D

3

Để thoát khỏi thiết bị đầu cuối Python , chỉ cần làm:

exit()

Vui lòng chú ý đó là một chức năng được gọi là hầu hết người dùng trộn nó với thoát mà không gọi, nhưng thiết bị đầu cuối Pyhton mới hiển thị một thông báo ...

hoặc như một phím tắt, nhấn:

Ctrl + D

trên bàn phím của bạn ...

ctrl + D


1
Tất cả mọi thứ bạn nói đã được đề cập trong các câu trả lời ở trên rồi.
Przemek D

0

Nếu bạn bị kẹt trong dòng lệnh python và không có giải pháp nào ở trên phù hợp với bạn, hãy thử exit(2)


-1

"exit" là tên biến hợp lệ có thể được sử dụng trong chương trình Python của bạn. Bạn sẽ không muốn thoát trình thông dịch khi bạn chỉ muốn xem giá trị của biến đó.


Ngoại trừ nếu bạn gán cho exit, bạn ghi đè biểu tượng này và exit()sẽ không hoạt động nữa. Mặc dù biểu tượng này là một tên biến hợp lệ, sử dụng nó theo cách như vậy dường như không phải là một thực tiễn rất tốt.
Przemek D
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.