Python – Usando keyboardInterrupt do Exceptions

KeyboardInterruptPythonCleitonBuenoWordpress

Durante a execução de um programa escrito em Python, você pode querer interromper a execução do mesmo, por algum problema ou por querer adicionar alguma coisa no código, mas quando se interrompe pelo terminal com o tradicional Ctrl + C uma mensagem chata é reportada, vamos ao exemplo keyboardinterruptex.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Tratamento Ctrl + C
"""

def main():
ano = input("Informe o ano: ")
print "Ano digitado: ", ano

if __name__ == "__main__":
main()

Código simples, inicia exibi a mensagem “Informe o ano” no terminal e espera você digitar, porém irei pressionar Ctrl + C para interromper a execução e vamos ver o que aparece no terminal.

cleiton@linuxVM:~/projetos/python/exceptions$ python keyboardinterrumptex.py
Informe o ano: ^CTraceback (most recent call last):
File "keyboardinterrumptex.py", line 14, in <module>
main()
File "keyboardinterrumptex.py", line 9, in main
ano = input("Informe o ano: ")
KeyboardInterrupt
cleiton@linuxVM:~/projetos/python/exceptions$

Coisa feia né? Uma época tentei resolver de um modo elegante mas acabei abandonando por não ter encontrado a solução (não pesquisei direito :)) ae por esses dias lendo docs.python.org entrei na parte de Built-in Exceptions e esta tudo lá ae foi fácil, vamos ver como contornar esse caso.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Tratamento Ctrl + C
"""

def main():
ano = input("Informe o ano: ")
print "Ano digitado: ", ano

if __name__ == "__main__":
try:
main()
except (KeyboardInterrupt):
print "nnVoce pressionou Ctrl+C ou Delete para interromper este programa!n"

Executando e interrompendo:

cleiton@linuxVM:~/projetos/python/exceptions$ python keyboardinterrumptex.py
Informe o ano: 2014
Ano digitado: 2014
cleiton@linuxVM:~/projetos/python/exceptions$ python keyboardinterrumptex.py
Informe o ano: ^C

Voce pressionou Ctrl+C ou Delete para interromper este programa!

cleiton@linuxVM:~/projetos/python/exceptions$

Segundo o doc do Python:

exception KeyboardInterrupt
Raised when the user hits the interrupt key (normally Control-C or Delete).

Foi mais do que suficiente quando eu li, no caso no except (KeyboardInterrupt) eu coloquei um print para dar uma mensagem na tela, caso você queira que saia sem reportar nada poderia fazer assim:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Tratamento Ctrl + C
"""

def main():
ano = input("Informe o ano: ")
print "Ano digitado: ", ano

if __name__ == "__main__":
try:
main()
except (KeyboardInterrupt):
pass

Vale muito a pena conferir esta parte de Build-in Exceptions do docs.python.org além de estudar os diversos tipos de exceções como (StandardError, ArithmeticError, EnvironmentError, IOError, KeyError, KeyboardInterrupt, MemoryError, NameError, OSError, ImportError, ReferenceError, SintaxError, TabError, SystemExit e dentre outros).

Espero que tenham gostado e até a próxima!

Referência

https://docs.python.org/2/library/exceptions.html

Share Button

CC BY-NC-SA 4.0 Python – Usando keyboardInterrupt do Exceptions by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.