2009-02-12 29 views
5

Tại sao mã không giống như bắt CTRL-C sau?Tại sao KeyboardInterrupt không hoạt động trong python?

MAXVAL = 10000 
STEP_INTERVAL = 10 

for i in range(1, MAXVAL, STEP_INTERVAL): 
    try: 
     print str(i) 
    except KeyboardInterrupt: 
     break 

print "done" 

Kỳ vọng của tôi là - nếu CTRL-C được nhấn trong khi chương trình đang chạy, KeyboardInterrupt là nghĩa vụ phải rời khỏi vòng lặp. Nó không.

Bất kỳ trợ giúp nào về những gì tôi đang làm sai?

+0

Nó hoạt động cho tôi trên Windows, Python 2.5 – jfs

+1

bạn không cho chúng tôi biết điều gì sẽ xảy ra! là gián đoạn bị bỏ qua hoặc nó dừng chương trình mà không in "thực hiện"? – hop

Trả lời

15

Âm thanh như chương trình được thực hiện bằng cách điều khiển thời gian-c bị trúng, nhưng hệ điều hành của bạn chưa hoàn thành hiển thị cho bạn tất cả đầu ra. .

0

Nó thoát khỏi vòng lặp và in "xong".

1

Nó hoạt động.

Tôi đang sử dụng Ubuntu Linux và bạn? Kiểm tra lại bằng cách sử dụng một cái gì đó như MaxVal = 10000000

+0

Tôi đang chạy trên Windows. – user63503

+0

Tôi hiểu. Nó không bị gián đoạn khi chạy trong Pythonwin (Python IDE). Nó hoàn toàn ngắt nếu được gọi từ dòng lệnh. Vì vậy, có vẻ như đó là một vấn đề với Pythonwin. – user63503

12

đang chảy như sau:

  1. for lấy đối tượng mới từ danh sách (tạo ra bởi range) và đặt i để nó
  2. try
  3. print
  4. quay trở lại 1

Nếu bạn nhấn CTRL-C ở phần 1 nó nằm ngoài số try/except, vì vậy nó sẽ không bắt ngoại lệ.

Hãy thử điều này thay vì:

MaxVal = 10000 
StepInterval = 10 

try: 
    for i in range(1, MaxVal, StepInterval): 
     print i 
except KeyboardInterrupt: 
    pass 

print "done" 
0

Tôi đã có vấn đề này cùng và tôi chỉ phát hiện ra những giải pháp là gì:

Bạn đang chạy mã này trong một IDE như PyCharm. IDE đang dùng ctrl + c (ngắt kết nối bàn phím) dưới dạng bản sao. Hãy thử chạy mã của bạn trong thiết bị đầu cuối.

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