Catch the KeyboardInterrupt Error in Python
The KeyboardInterrupt error occurs when a user manually tries to halt the running program by using the Ctrl + C or Ctrl + Z commands or by interrupting the kernel in the case of Jupyter Notebook. To prevent the unintended use of KeyboardInterrupt that often occurs, we can use exception handling in Python.
In this guide, you’ll learn how to catch the KeyboardInterrupt error in Python.
Use the try. except Statement to Catch the KeyboardInterrupt Error in Python
To explain the code for KeyboardInterrupt in Python, we take a simple program that asks the user for input while manually handling the KeyboardInterrupt exception.
The following code uses the try. except statement to catch the KeyboardInterrupt error in Python.
The program above provides the following output.
In the code above, the input function resides between the try block and is left empty as further details are not needed in this case. Then, the except block handles the KeyboardInterrupt error. The KeyboardInterrupt error is manually raised so that we can identify when the KeyboardInterrupt process occurs.
Python allows the definition of as many except blocks as the user wants in a chunk of code.
Use Signal Handlers to Catch the KeyboardInterrupt Error in Python
The sys module in Python is utilized to provide several necessary variables and functions used to manipulate distinct parts of the Python runtime environment.
The signal and sys modules need to be imported to the Python code to use this method successfully without any error.
The following code uses signal handlers to catch the KeyboardInterrupt error in Python.
The code above provides the following output.
In the code above, the signal.signal() function is utilized to define custom handlers to be executed when a signal of a certain type is received.
Как остановить сценарий Python (клавиатура и программно)
https://youtu.be/98nlj9dpx7e Зачем остановить сценарий Python? В качестве языка программирования Python предназначен для чтения строки кода по линии и остановится в конце сценария по умолчанию – так почему нам нужно было остановить его? Хотя есть ряд причин, по которым это может потребоваться, они в основном попадают в две отдельные категории: … Как остановить сценарий Python (клавиатура и программно) Подробнее “
Зачем остановить сценарий Python?
В качестве языка программирования Python предназначен для чтения строки кода по линии и остановится в конце сценария по умолчанию – так почему нам нужно было остановить его?
Пока есть ряд причин, по которым это может потребоваться, они в основном падают на две отдельные категории:
Вариант 2 можно запланировать, включая механизм остановки в нашем коде, I.E. Программно. Для варианта 1 мы должны понять, как произвольно остановить наш код, когда программа работает, и мы сделаем это, используя нашу клавиатуру. Давайте посмотрим на эти два варианта более подробно.
Клавиатура останавливается
Точный механизм для остановки клавиатуры действительно будет зависеть от вашей операционной системы, для целей этой статьи мы будем использовать машину Windows 10, поэтому весь синтаксис будет относиться к этой среде.
Начать с того, что давайте собрали небольшой сценарий, который даст нам проблему, которую мы стремимся решить, и называть это Test.py и сохранить его в рабочем каталоге C: \ Пользователи \ Rikesh :
Если мы сейчас запустим вышеупомянутый скрипт через наш переводчик Python, он будет просто продолжать печатать номера последовательно на неопределенный срок. Мы не привели к нему никаких условий, чтобы остановиться.
Прерывание клавиатуры
Одним из наиболее распространенных методов остановки скрипта является использованием следующего сочетания клавиш, который известен как KeyboardInterRupt:
Когда мы используем это, мы получаем ответ от нашего переводчика Python, говоря нам, что программа была остановлена с помощью этого ярлыка.
2.2 Ctrl + пауза/перерыв
Хотя вышеизложенное работает хорошо с нашим простым примером кода, есть времена, когда это может быть не так. Например, наш скрипт мог бы явно остановить это от работы, специально исключая клавиатуру I.E, кроме KeyboardInterTrupt, или он может даже быть исключен с нормальным, кроме синтаксиса. Например:
Влияние кроме:, в этом примере состоит в том, чтобы отрицать нашу клавиатуру врачуса – будь умышленно или нет. Так что теперь, когда мы запускаем вышеупомянутый скрипт через нашу командную строку Windows, наш сочетаний Ctrl + C неэффективна, а цифры продолжают печатать.
В этом случае мы можем использовать Ctrl + Pause/Break, которая является гораздо более мощным способом остановки нашего сценария.
Не только это останавливает сценарий, но как это не KeyboardInterrupt Ярлык Мы не получаем то же сообщение от нашего переводчика. Мы просто возвращаемся в командную строку.
Программные остановки
Таким образом, мы видели, как использовать нашу клавиатуру, чтобы остановить наши скрипты, теперь давайте посмотрим, как мы можем использовать наш код, чтобы остановить скрипты. Это, очевидно, потребует от нас понимать наш код и предварительно определить, где будет необходима любые остановки.
Программно в процессе развития
При запуске Python модуль сайта автоматически загружен автоматически, и это по умолчанию поставляется с объектами QUIT () и EXIT (). Эти два объекта работают так же, как следует, и, поскольку их имена предлагают можно использовать для остановки наших скриптов:
В обоих случаях, если мы запустим код выше из нашего интерпретатора, программа автоматически остановится и выйдет/выходит, как только X попадет до 5.
Однако, пожалуйста, обратите внимание как Quit () и Выход () предназначены только для использования в интерпретатере Python, где был загружен модуль сайта. Никто из них не считается подходящим для использования в производственном коде, то есть в реальной ситуации, поскольку мы не контролируем, как и если модуль сайта загружен. По этой причине оба из этих вариантов следует использовать только в целях развития и в переводчике Python.
Программно в производственном коде
Так что теперь давайте посмотрим на то, как мы можем остановить наши сценарии бегать в производственном коде. Чтобы уточнить, этим мы имеем в виду код, который готов к отправке клиенту/конечным пользователю. Он был отлажен и хорошо структурирован и хорошо документирован.
Использование sys.exit ()
Это самый распространенный способ остановки наших сценариев программно, и это делает это, бросая/повышая исключение системы. Если исключение не поймано, что переводчик Python закрыт, и программа останавливается. Как нам нужно явно импортировать модуль SYS, мы производим SYS часть нашего сценария, эффективно гарантируя, что он всегда будет там, когда код работает. Это делает этот метод идеальным для использования в нашем производственном коде:
Теперь, запустив скрипт, мы получаем следующий вывод:
Поднять системуExit.
Это интересно, потому что он делает все, что sys.exit () Есть ли, похоже, не используется или не считается наилучшей практикой. Это имеет преимущество, что не требует никакого импорта и всех sys.exit () Операция делает, как мы видели в предыдущем разделе, это поднять SystemExit Исключение в любом случае. Поэтому есть аргумент, что, используя этот метод, мы делаем наш очиститель кода и более эффективным:
И когда мы запускаем код, вывод выглядит следующим образом:
Использование OS._EXIT ()
Последний метод мы рассмотрим OS._EXIT () который является частью Python ОС Модуль, обеспечивающий функции для взаимодействия непосредственно с операционной системой. Этот метод в основном призывает к немедленному прекращению программы, а не повысить исключение, так что, возможно, самый экстремальный из всех, как мы видели.
Поэтому практическое использование ограничено очень конкретными случаями, поэтому для целей настоящей статьи мы сосредоточимся на том, как его использовать, а не почему и когда. Во-первых, мы должны импортировать ОС Модуль для него для работы, и в отличие от других методов, которые мы видели, мы не можем пройти пустой параметр. Это означает, что нам нужно указать состояние выхода, которое обычно является целочисленным значением, причем 0 – обычный выход. Если предположить, что это так, как наш код будет выглядеть так:
И когда мы запускаем код, вывод выглядит следующим образом:
Резюме
Мы видели ряд методов прекращения ваших сценариев Python, которые не должны приходить как сюрприз для всех, кто знаком с Python. Пока все они предоставляют один и тот же конечный результат, у них есть разные приложения, особенно между использованием клавиатуры или просто находятся в программном порядке с вашим кодом.
Мир Python: исключения — Python для продвинутых
Введение
В этом уроке вы узнаете о важном средстве языка, без которого крупная программа не может обойтись. Речь пойдет об исключениях. Что это такое, как ими пользоваться и как создавать собственные?
Исключительные ситуации или исключения (exceptions) – это ошибки, обнаруженные при исполнении. Например, к чему приведет попытка чтения несуществующего файла? Или если файл был случайно удален пока программа работала? Такие ситуации обрабатываются при помощи исключений.
Если же Python не может понять, как обойти сложившуюся ситуацию, то ему не остается ничего кроме как поднять руки и сообщить, что обнаружил ошибку. В общем, исключения необходимы, чтобы сообщать программисту об ошибках.
В данном случае интерпретатор сообщил нам об исключении ZeroDivisionError – делении на ноль.
Traceback
В большой программе исключения часто возникают внутри. Чтобы упростить программисту понимание ошибки и причины такого поведения Python предлагает Traceback или в сленге – трэйс. Каждое исключение содержит краткую информацию, но при этом полную, информацию о месте появления ошибки. По трэйсу найти и исправить ошибку становится проще.
Рассмотрим такой пример:
В данном примере чётко видно, какой путь исполнения у программы. Смотрим снизу вверх и по шагам понимаем, как же мы докатились до такого исключения.
Рассмотрим какие ещё встречаются комментарии к исключениям:
В данном примере при попытке сложить целое число и строку мы получаем исключение TypeError. В описании сразу же становится ясно, что же мы не так написали.
Приведение строчки к целому числу приводит к исключению ValueError.
В трэйсе этих двух примеров можно прочесть, что в таком-то файле на такой-то строчке есть ошибки.
На этом список встроенных исключений не заканчивается, в следующем разделе рассмотрены основные исключения и причины их возникновения.
Иерархия исключений
Исключение, которое вы не увидите при выполнении кода – это BaseException – базовое исключение, от которого берут начало остальные.
В иерархии исключений две основные группы:
Если обработку первых лучше не делать (если и делать, то надо четко понимать для чего), то обработку вторых целиком и полностью Python возлагает на плечи программиста.
К системным можно смело отнести:
Остальные исключения – это «обыкновенные». Спектр уже готовых исключений велик.
Для Python2 иерархию исключений можно представить так:
Список исключений покрывает большой объем ситуаций и ошибок программиста. Если предупреждения (warning) только просят обратить внимание, то ошибки уже могут остановить исполнение программы.
В Python3 появились новые исключения и иерархия стала такова:
В целом заметно, что при создании Python3 добавлен блок новых исключений. Но даже этих почти 70 исключений не хватает при написании программ на языке Python.
Использование исключений
Мы рассмотрели что такое исключения, какие они бывают и как их анализировать. Но до сих пор явно не рассмотрели такую важную вещь, как их использование.
Начнем с обработки.
Обработка исключений
Давайте рассмотрим случай с делением на 0.
Если исполнить этот код, то на консоль будет выведена строка «integer division or modulo by zero«. Казалось бы, что толком ничего это нам не дало, ошибка все также есть. Однако в блок except можно поместить обработку.
Перед тем как идти дальше, рассмотрим ещё одну возможность.
Пускай у нас файл с данными в файловой системе, и необходимо его прочитать. В этом случае сразу же всплывают несколько исключительных ситуаций, такие как: нет файла, файл битый, файл пустой (по заданию мы знаем, что в нём данные) и другие.
Используя исключения, можно вот так решить эту задачу:
В данном вымышленном коде новый ход – перехват нескольких видов исключений. Когда исключение брошено, оно сравнивается сверху вниз с каждым типом, пока не найдено совпадение. Если совпадения нет, то исключение пойдет наверх по цепочке исполнения кода.
Если обработка для разных типов исключений одинакова, то уменьшить количество кода становится не проблемой:
Вызов исключений
При работе с исключениями программист тратит большую часть времени на обработку, но при этом возникают ситуации, когда исключениями надо и бросать в других.
На сленге программистов «бросить исключение» означает написать код, который при исполнении будет инициировать исключительную ситуацию.
Например, функция, которая решает квадратное уравнение. Вы условились, что корни только вещественные, тогда в случае комплексных корней стоит бросить исключение.
Чтобы бросить исключение необходимо воспользоваться raise
где IOError это класс исключения.
Если при обработке исключения вы желаете пробросить его ещё выше, то следует написать такой код:
Собственные исключения
При написании собственных программ разумное желание добавить выразительности коду, а так же обратить внимание других программистов на особые исключительные ситуации. Для решения этой задачи стоит использовать собственные исключения.
В минимальном исполнении необходимо наследоваться от какого-нибудь класса в иерархии исключений. Например так:
Тогда можно бросить своё исключение:
Легко заметить, мы создаем класс, а значит всё, что мы знаем о классах, справедливо и для исключений. Можно завести переменные и делать их обработку.
Как правило, исключения это очень маленькие классы. Они должны выполняться максимально быстро.
Дополнение: Полная форма try..except
Применение полной конструкции может заметно упростить код, а также сделать его более безопасным.
Представим, что в программе происходит чтение файла и необходимо убедиться, что объект файла был корректно закрыт и что не возникло никакого исключения. Этого можно достичь с применением блока finally.
Иными словами, finally выполняет блок инструкций в любом случае, было ли исключение, или нет. А инструкция else выполняется в том случае, если исключения не было.
В целом, использование полной формы таково:
Выводы
В уроке рассмотрены вопросы связанные с исключениями:
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты.
Нашли опечатку или неточность?
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Что-то не получается или материал кажется сложным?
Загляните в раздел «Обсуждение»:
Об обучении на Хекслете
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Обработка исключений в Python
Что вы предпринимаете, когда с работой вашей программы что-то идет не так? Допустим, вы пытаетесь открыть файл, но вы ввели неверный путь, или вы хотите узнать информацию у пользователей и они пишут какую-то бессмыслицу. Вы не хотите, чтобы ваша программа крэшилась, по-этому вы выполняете обработку исключений. В Пайтоне, конструкция всегда обернута в то, что называется try/except. В данном разделе мы рассмотрим следующие понятия:
Начнем со знакомства с самыми обычными исключениями, которые вы увидите в Пайтоне. Обратите внимание на то, что ошибка и исключение – два разных слова, описывающие одно и то же, в контексте обработки исключений.
Основные исключения
Вы уже сталкивались со множеством исключений. Ниже изложен список основных встроенных исключений (определение в документации к Пайтону):
Существует много других исключений, но вы вряд ли будете сталкиваться с ними так же часто. В целом, если вы заинтересованы, вы можете узнать больше о них в документации Пайтон.
Как обрабатывать исключения?
Обработка исключений в Пайтон – это очень просто. Потратим немного времени и напишем несколько примеров, которые их вызовут. Мы начнем с одной из самых элементарных проблем: деление на ноль.
Разберём это сообщение подробнее: интерпретатор нам сообщает о том, что он поймал исключение и напечатал информацию (Traceback (most recent call last)).
Далее имя файла (File «»). Имя пустое, потому что мы находимся в интерактивном режиме, строка в файле (line 1);
Выражение, в котором произошла ошибка (100 / 0).
Название исключения (ZeroDivisionError) и краткое описание исключения (division by zero).
Разумеется, возможны и другие исключения:
В этих двух примерах генерируются исключения TypeError и ValueError соответственно. Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.
Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встретиться и другие, так как программисты могут создавать собственные исключения. Данный список актуален для python 3.3, в более ранних версиях есть незначительные изменения.
Первый пример применения этой конструкции:
В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.
Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит).
Ещё две инструкции, относящиеся к нашей проблеме, это finally и else. Finally выполняет блок инструкций в любом случае, было ли исключение, или нет (применима, когда нужно непременно что-то сделать, к примеру, закрыть файл). Инструкция else выполняется в том случае, если исключения не было.








