Здесь код:
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
пожалуйста, будьте ясными, когда вы хотите поймать KeyboardInterrupt
:
try:
input() # I hit Ctrl+C
except Exception as e:
print(str(e))
except KeyboardInterrupt :
print 'ok, ok, terminating now...'
KeyboardInterrupt
- это не Exception
а только Exception
BaseException
, поэтому ваше except
не обрабатывает его:
>>> issubclass(KeyboardInterrupt, Exception)
False
>>> issubclass(KeyboardInterrupt, BaseException)
True
Обработка BaseException
дает вам доступ к любому исключению, но не рекомендуется:
try:
# ...
except BaseException as e:
print(str(e))
except BaseException:
или просто except:
но оба не приветствуются, поскольку, среди прочего - как в вашем примере - вы больше не можете прерывать вашу программу. Лучше быть настолько явным, насколько это возможно, и при необходимости добавить больше типов исключений, которые вы хотите обработать.
except KeyboardInterrupt
перехватывает Ctrl / C, и вы можете обрабатывать все другие исключения в следующем оператореexcept
. Или вы хотите сделать что-то совершенно другое?