Удалить трассировку в Python на Ctrl-C - PullRequest
19 голосов
/ 16 августа 2011

Есть ли способ предотвратить появление обратных трассировок при нажатии Ctrl + c , то есть повысить KeyboardInterrupt в скрипте Python?

Ответы [ 7 ]

31 голосов
/ 01 августа 2012

Попробуйте это:

import signal
signal.signal(signal.SIGINT, lambda x,y: sys.exit(0))

Таким образом, вам не нужно оборачивать все в обработчик исключений.

24 голосов
/ 16 августа 2011
import sys
try:
    # your code
except KeyboardInterrupt:
    sys.exit(0) # or 1, or whatever

Это самый простой способ, при условии, что вы все еще хотите выйти, когда получаете Ctrl + c .

Если вы хотите перехватить его без попытки / исключения, вы можете использовать рецепт, подобный этому , используя signal модуль , за исключением того, что он, кажется, не работает для я на Windows ..

6 голосов
/ 16 августа 2011

Catch the KeyboardInterrupt:

try:
    # do something
except KeyboardInterrupt:
    pass
2 голосов
/ 16 августа 2011
try:
    your_stuff()
except KeyboardInterrupt:
    print("no traceback")
1 голос
/ 16 августа 2011

Поймай его блоком try / Кроме:

while True:
   try:
      print "This will go on forever"
   except KeyboardInterrupt:
      pass
0 голосов
/ 30 июня 2015
import sys
try:
    print("HELLO")
    english = input("Enter your main launguage: ")
    print("GOODBYE")
except KeyboardInterrupt:
    print("GET LOST")
0 голосов
/ 13 ноября 2011

Также обратите внимание, что по умолчанию интерпретатор завершает работу с кодом состояния 128 + значение SIGINT на вашей платформе (которое в большинстве систем равно 2).

    import sys, signal

    try:
        # code...
    except KeyboardInterrupt: # Suppress tracebacks on SIGINT
        sys.exit(128 + signal.SIGINT) # http://tldp.org/LDP/abs/html/exitcodes.html
...