Обработка Python любого исключения дает ошибку KeyboardInterrupt

1

Здесь код:

try:
    input() # I hit Ctrl+C
except Exception as e:
    print(str(e))

Здесь трассировка:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\test.py", line 2, in <module>
    input()
KeyboardInterrupt
Теги:
exception

2 ответа

1

пожалуйста, будьте ясными, когда вы хотите поймать KeyboardInterrupt:

try:
    input() # I hit Ctrl+C
except Exception as e:
    print(str(e))
except KeyboardInterrupt :
    print 'ok, ok, terminating now...'
  • 0
    Так что, если я хочу обработать текст какого-либо исключения, но я не знаю имя каждого исключения, как мне это сделать?
  • 0
    @JoeDoe см. Приведенный выше код, except KeyboardInterrupt перехватывает Ctrl / C, и вы можете обрабатывать все другие исключения в следующем операторе except . Или вы хотите сделать что-то совершенно другое?
Показать ещё 5 комментариев
0

KeyboardInterrupt - это не Exception а только Exception BaseException, поэтому ваше except не обрабатывает его:

>>> issubclass(KeyboardInterrupt, Exception)
False
>>> issubclass(KeyboardInterrupt, BaseException)
True

Обработка BaseException дает вам доступ к любому исключению, но не рекомендуется:

try:
    # ...
except BaseException as e:
    print(str(e))
  • 0
    Так что, если я хочу обработать текст какого-либо исключения, но я не знаю имя каждого исключения, как мне это сделать?
  • 0
    Вы бы сделали, except BaseException: или просто except: но оба не приветствуются, поскольку, среди прочего - как в вашем примере - вы больше не можете прерывать вашу программу. Лучше быть настолько явным, насколько это возможно, и при необходимости добавить больше типов исключений, которые вы хотите обработать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню