- Python Keyboardinterrupt
- Исключение KeyboardInterrupt и как оно работает?
- Пример 1
- Пример 2
- Пример 3
- Заключение
- Understand KeyboardInterrupt in Python Before You Regret
- What is Keyboard Interrupt Exception?
- Looping until Keyboard Interrupt
- Catching/Handling KeyboardInterrupt
- Catching KeyboardInterrupt using Signal module
- Subprocess KeyboardInterrupt
- FAQs on KeyboardInterrupt
- Conclusion
Python Keyboardinterrupt
Программирование и разработка
Поскольку мы очень хорошо знаем, что такое исключения и как ими управлять в Python, мы можем перейти к следующему разделу. С точки зрения непрофессионала, исключения — это все, что нарушает нормальный ход программы. Точно так же KeyboardInterrupt — это исключение Python, которое генерируется, когда пользователь или программист прерывает обычное выполнение программы.
Во время выполнения программы интерпретатор Python регулярно проверяет наличие прерываний. Когда пользователь или программист по ошибке или намеренно нажимает клавишу ctrl-c или del в Python, интерпретатор выдает исключение KeyboardInterrupt.
Исключение KeyboardInterrupt наследует BaseException и, как и другие исключения Python, обрабатывается с помощью оператора try-except, чтобы предотвратить внезапный выход интерпретатора из программы.
Исключение KeyboardInterrupt и как оно работает?
KeyboardInterrupt Исключение — это стандартное исключение, которое выдается для управления ошибками клавиатуры. В Python нет специального синтаксиса для исключения KeyboardInterrupt; это обрабатывается в обычном блоке try и exclude. Код, который потенциально вызывает проблему, записывается внутри блока try, а ключевое слово «raise» используется для возбуждения исключения или интерпретатор Python вызывает его автоматически.
Один из самых неприятных аспектов работы с Python заключается в том, что он завершает работу программы, когда пользователь нажимает ctrl-c, намеренно или непреднамеренно, что является серьезной проблемой при работе с большими объемами данных, например при извлечении записей из базы данных. обработка, выполнение большой программы, выполняющей несколько задач одновременно, и так далее.
Это исключение ведет себя так же, как и другие исключения Python. Единственная разница с этим исключением состоит в том, что его создал пользователь и что компьютер не принимал в нем участия. Обратитесь к следующим разделам, чтобы узнать больше об этой концепции.
Пример 1
Когда дело доходит до управления исключениями в Python, используется оператор try…except. Оператор try…except имеет особый синтаксис, разделенный на три части, каждая из которых имеет свое назначение и функцию в коде Python.
Блок try содержит набор кода, который интерпретатор должен проверить на наличие ошибок. Блок exclude добавляет необходимые исключения, чтобы избежать ошибок кода. Последний блок включает в себя предложения, которые должны быть выполнены без проверки, но игнорируются блоками try и exclude.
Мы создадим небольшую программу, которая запрашивает ввод данных от пользователя при ручной обработке исключения KeyboardInterrupt, чтобы продемонстрировать код Python для KeyboardInterrupt. Оператор try…except используется в следующем коде Python для захвата ошибки KeyboardInterrupt.
Функция ввода расположена между блоками try в приведенном выше коде и оставлена пустой, поскольку в этом сценарии дополнительная информация не требуется. Затем блок, если не обрабатывает ошибку KeyboardInterrupt.
Чтобы определить, когда происходит процедура KeyboardInterrupt, мы вручную выдаем ошибку KeyboardInterrupt. Python позволяет пользователю определять столько блоков, если они не хотят, в части кода.
Пример 2
Теперь мы будем использовать обработчики сигналов. В Python модуль signal используется для предложения функций и процессов, использующих обработчики сигналов.
Когда это происходит, KeyboardInterrupt вызывается по умолчанию. Модуль sys в Python предоставляет ряд полезных переменных и функций для управления средой выполнения Python.
Модули signal и sys должны быть включены в код Python, чтобы использовать этот подход без ошибок. Обработчики сигналов используются в следующем коде Python для обнаружения ошибки KeyboardInterrupt.
Результат приведенного выше кода выглядит следующим образом.
Функция signal.signal() используется в приведенном выше коде для указания пользовательских обработчиков, которые будут запускаться при получении сигнала определенного типа. Стоит отметить, что как только обработчик настроен для определенного сигнала, он остается на месте, пока пользователь не сбросит его активно. Обработчик SIGCHLD является единственным исключением в этой ситуации.
Пример 3
Вот последняя программа, которую мы рассмотрим. Код внутри блока try потенциально выдает исключение, а затем принимает введенное пользователем «имя». Затем записываются различные классы исключений для перехвата/обработки исключения. Если классы исключений (как показано в приведенном ниже коде) не совпадают, остальная часть кода будет запущена.
Когда пользователь нажимает клавишу ctrl -c, появляется следующий вывод, когда программа запрашивает имя пользователя. Оператор печати, созданный для исключения KeyboardInterrupt, печатается в выходных данных, когда пользователь нажимает ctrl-c, что является исключением пользовательского прерывания.
Когда пользователь нажимает клавишу ctrl-d и запрашивает имя пользователя, создается вывод, показанный ниже. Оператор печати, определенный внутри класса исключений EOF, отображается, когда пользователь нажимает кнопку ctrl-d, что означает конец файла. Это указывает, что если в коде обнаружено исключение, выполняется поиск соответствующего класса исключения и выполняется следующий блок.
Заключение
Исключение KeyboardInterrupt, то, как оно возникает и как оно обрабатывается в Python, описано в предыдущей статье. Исключение KeyboardInterrupt, как следует из его названия, представляет собой простое исключение, которое возникает, когда программа прерывается клавиатурой пользователя. Для любого программиста, новичка или опытного, очень важно понять каждую форму исключения, чтобы правильно с ними справиться и быстро создать программу (способную справиться с любой такой ситуацией).
Understand KeyboardInterrupt in Python Before You Regret
Today seems to be a fine day to learn about KeyboardInterrupt. If you read this article, I can deduce that you have some proficiency with exceptions and exception handling. Don’t sweat it even if you have no knowledge about them; we will give you a brief refresher.
Exceptions are errors that may interrupt the flow of your code and end it prematurely; before even completing its execution. Python has numerous built-in exceptions which inherit from the BaseException class. Check all built-in exceptions from here.
Try-catch blocks handle exceptions, for instance:
try: div_by_zero = 10/0 except Exception as e: print(f"Exception name:") else: print("I would have run if there wasn't any exception") finally: print("I will always run!")
The big idea is to keep that code into a try block which may throw an exception. Except block will catch that exception and do something(statements defined by the user). Finally, block always gets executed, generally used for handling external resources. For instance, database connectivity, closing a file, etc. If there isn’t any exception, code in the else block will also run.
What is Keyboard Interrupt Exception?
KeyboardInterrupt exception is a part of Python’s built-in exceptions. When the programmer presses the ctrl + c or ctrl + z command on their keyboards, when present in a command line(in windows) or in a terminal(in mac os/Linux), this abruptly ends the program amidst execution.
Looping until Keyboard Interrupt
count = 0 whilte True: print(count) count += 1
Try running this code on your machine.
An infinite loop begins, printing and incrementing the value of count. Ctrl + c keyboard shortcut; will interrupt the program. For this reason, program execution comes to a halt. A KeyboardInterrupt message is shown on the screen.
Python interpreter keeps a watch for any interrupts while executing the program. It throws a KeyboardInterrupt exception whenever it detects the keyboard shortcut Ctrl + c. The programmer might have done this intentionally or unknowingly.
Catching/Handling KeyboardInterrupt
try: while True: print("Program is running") except KeyboardInterrupt: print("Oh! you pressed CTRL + C.") print("Program interrupted.") finally: print("This was an important code, ran at the end.")
Try-except block handles keyboard interrupt exception easily.
- In the try block a infinite while loop prints following line- “Program is running”.
- On pressing ctrl + c, python interpretor detects an keyboard interrupt and halts the program mid execution.
- After that, finally block finishes its execution.
Catching KeyboardInterrupt using Signal module
Signal handlers of the signal library help perform specific tasks whenever a signal is detected.
import signal import sys import threading def signal_handler(signal, frame): print('\nYou pressed Ctrl+C, keyboardInterrupt detected!') sys.exit(0) signal.signal(signal.SIGINT, signal_handler) print('Enter Ctrl+C to initiate keyboard iterrupt:') forever_wait = threading.Event() forever_wait.wait()
Let’s breakdown the code given above:
- SIGINT reperesents signal interrupt. The terminal sends to the process whenever programmer wants to interrupt it.
- forever_wait event waits forever for a ctrl + c signal from keyboard.
- signal_handler function on intercepting keyboard interrupt signal will exit the process using sys.exit.
Subprocess KeyboardInterrupt
A subprocess in Python is a task that a python script assigns to the Operative system (OS).
while True: print(f"Program running..")
import sys from subprocess import call try: call([sys.executable, 'process.py'], start_new_session=True) except KeyboardInterrupt: print('[Ctrl C],KeyboardInterrupt exception occured.') else: print('No exception')
Let’s understand the working of the above codes:
- We have two files, namely, process.py and test.py. In the process.py file, there is an infinite while loop which prints “Program sub_process.py running”.
- In the try block sys.executeble gives the path to python interpretor to run our subprocess which is process.py.
- On pressing ctrl + c, python interpretor detects an keyboard interrupt and halts the program mid execution. Later handled by the except block.
FAQs on KeyboardInterrupt
To prevent traceback from popping up, you need to handle the KeyboardInterrupt exception in the except block.
try:
while True:
print(«Running program…»)
except KeyboardInterrupt:
print(«caught keyboard interrupt»)
If a cell block takes too much time to execute, click on the kernel option, then restart the kernel 0,0 option.
When using the flask framework use these functions.
Windows : netstat -ano | findstr
Linux: netstat -nlp | grep
macOS: lsof -P -i :
This is a Python bug. When waiting for a condition in threading.Condition.wait(), KeyboardInterrupt is never sent.
import threading
cond = threading.Condition(threading.Lock()) cond.acquire()
cond.wait(None) print «done»
Conclusion
This article briefly covered topics like exceptions, try-catch blocks, usage of finally, and else. We also learned how keyboard interrupt could abruptly halt the flow of the program. Programmers can use it to exit a never-ending loop or meet a specific condition. We also covered how to handle keyboard interrupt using try-except block in Python. Learned about another way to catch keyboard interrupt exception and interrupted a subprocess.