Статьи

Отладка в Python

При упоминании отладки это означает, что в середине может быть ошибка . Ну, я не имею в виду ошибку, которую можно найти в доме — я имею в виду ошибку программирования!

Прежде чем двигаться дальше с этим учебником, давайте разберемся с некоторыми терминами. Давайте кратко определим, что мы подразумеваем под ошибкой и отладкой .

Ошибка в вычислениях может возникнуть как в программном, так и в аппаратном обеспечении, но мы сосредоточены здесь на программном обеспечении. Позвольте мне быстро упомянуть мнение о том, откуда мог появиться термин « ошибка» . Считается, что первое использование термина « ошибка» в вычислительной технике произошло, когда в одном из реле компьютера Mark II был обнаружен настоящий баг (моли). Термин ошибка также использовался в конце 19-го века для описания технических сбоев.

Ошибки в программном обеспечении приводят к непредвиденному поведению программы. Этот термин обычно используется для обозначения ошибки с неизвестным местоположением и причиной, и они могут вызвать серьезные проблемы (например, сбой программы).

В этой ситуации отладка вступает в игру.

Что ж, можно сказать, что лучший способ избежать каких-либо проблем — это не создавать ошибки в первую очередь. Но это, к сожалению, довольно редко, и с самого начала создать чистую программу нелегко. Наличие ошибок — нормальная ситуация, в которую вы бы попали.

Отладка — это процесс поиска, анализа и исправления любой ошибки (ошибки), с которой вы можете столкнуться. Конечная цель отладки состоит в том, чтобы устранить такие ошибки и создать программу, которая работает и ведет себя так, как задумано. Здесь важно отметить, что большая часть времени будет потрачена на обнаружение ошибки, поскольку, как мы упоминали выше, изначально она имеет неизвестное местоположение.

Чтобы иметь представление о том, насколько трудной может быть отладка, посмотрите, что сказал Брайан Керниган:

Все знают, что отладка в два раза сложнее, чем написание программы. Итак, если вы настолько умны, насколько это возможно, когда вы пишете это, как вы будете когда-либо отлаживать его?

Исключением является объект, который указывает на наличие ошибки (ошибки). Другими словами, Python использует исключения, чтобы сообщить, что в программе есть ошибки. Это будет частью локализации процесса отладки. Получение объекта исключения и выполнение необходимых действий для устранения ошибки относится к обработке исключения. Это будет анализ и исправление шагов в процессе отладки.

Инструкция Python try используется для обработки исключений и имеет две формы: try/except и try/finally . В первом случае за предложением try может следовать одно или несколько, except предложений, а во втором случае за ним может следовать только одно предложение finally .

Синтаксис try/except выглядит следующим образом:

1
2
3
4
try:
    # try block code
except:
    # except block code

Тело предложения try будет содержать код, который может генерировать исключение, при условии, что если сгенерировано исключение, все операторы в блоке будут пропущены. С другой стороны, тело предложения except называется обработчиком исключения , так как оно используется для перехвата исключения. Код блока except будет выполняться только в том случае, если сгенерировано исключение, в противном случае блок будет пропущен. Вы можете использовать встроенные исключения, как показано в стандартной библиотеке Python .

Давайте рассмотрим пример, чтобы прояснить ситуацию. Скажем, нас попросили ввести знаменатель в формулу деления. Поскольку деление на ноль не допускается, давайте напишем инструкцию try/except которая проверяет, есть ли деление на ноль, и печатает сообщение, если произошла эта ошибка.

1
2
3
4
5
6
denominator = input(‘Enter a denominator value: ‘)
try:
    formula = 15/denominator
    print ‘The result is ‘ + str(formula)
except ZeroDivisionError:
    print ‘You attempted to divide by zero which is not allowed’

Например, если вы введете значение 5 , вы получите следующий вывод:

1
The result is 3

Теперь попробуйте ввести значение 0 качестве ввода. Какой выход вы получите в этом случае?

try/finally — это еще один способ написать оператор try в Python. Предложения finally называются предложениями очистки / завершения, поскольку они всегда должны выполняться независимо от того, произошло ли исключение в блоке try .

Давайте попробуем пример из приведенного выше раздела, но с предложением finally :

1
2
3
4
5
6
denominator = input(‘Enter a denominator value: ‘)
try:
    formula = 15/denominator
    print ‘The result is ‘ + str(formula)
finally:
    print ‘You attempted to divide by zero which is not allowed’

Обратите внимание, что при вводе значения 5 качестве ввода, например, вы получите следующий вывод:

1
2
The result is 3
You attempted to divide by zero which is not allowed

Ключевое слово raise — еще один способ обработки исключений в Python. В этом случае вы сможете создавать свои собственные исключения, то есть исключения, возникающие при возникновении проблемы, выходящей за рамки ожидаемых ошибок.

Давайте рассмотрим пример использования ключевого слова raise чтобы лучше понять концепцию.

1
2
3
4
5
6
7
8
try:
    x = input(‘Enter a number in the range 1-10: ‘)
    if x<1 or x>10:
        raise Exception
    print ‘Great!
 
except:
    print ‘Your number seems to be outside the range 1-10’

В этом примере, если вы введете число вне допустимого диапазона, будет выполнен оператор print в блоке except .

Продолжайте, попробуйте некоторые значения и проверьте вывод.

Модуль traceback Python — это еще один способ обработки исключений в Python. Он в основном используется для печати стековых трасс программы после возникновения исключения. traceback содержит сообщение об ошибке, номер строки, вызвавшей ошибку, и стек вызовов , который представляет собой последовательность вызовов функций, которые привели к ошибке.

Давайте рассмотрим пример, который генерирует traceback :

1
2
3
4
def createException(name):
    raise Exception(‘It seems that ‘ + name + ‘ raised an exception’)
     
createException(‘Abder’)

Если вы запустите этот скрипт, вы получите вывод, который выглядит следующим образом:

1
2
3
4
5
6
Traceback (most recent call last):
  File «test.py», line 4, in <module>
    createException(‘Abder’)
  File «test.py», line 2, in createException
    raise Exception(‘It seems that ‘ + name + ‘ raised an exception’)
Exception: It seems that Abder raised an exception

Обратите внимание, что ошибка (ошибка) произошла в line 2 в функции createException . Также обратите внимание, что стек вызовов может помочь нам отследить, какой вызов привел к ошибке, которая в данном случае является вызовом, который произошел в line 4 .

Урок становится длиннее, и я бы хотел на этом остановиться. Как вы уже видели, отладка программ действительно естественная и регулярная вещь, и я считаю, что типы ошибок, которые вы видели в этом руководстве, звучат знакомо, не так ли?

Есть и другие способы отладки программы на Python и обработки исключений. Например, хорошо известным способом является assert statement .

Удачной отладки!