Как отлаживать Python с помощью интерактивной консоли

Вступление

  • Отладка * - это часть процесса разработки программного обеспечения, где программисты ищут, а затем решают проблемы, мешающие правильной работе программного обеспечения.

Полезный и быстрый инструмент для отладки - это Python https://docs.python.org/3/library/code.html [+ code + module], поскольку его можно использовать для эмуляции интерактивного интерпретатора. Модуль также предоставляет вам возможность экспериментировать с кодом, который вы пишете на Python.

Понимание модуля + code +

Вместо пошагового выполнения кода с помощью отладчика вы можете add модуль + code + к вашему Python программа, чтобы дать команду программе прекратить выполнение и войти в интерактивный режим, чтобы проверить, как работает ваш код. Модуль + code + является частью стандартной библиотеки Python.

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

Чтобы использовать модуль в качестве метода отладки, вы можете использовать функцию модуля + + взаимодействовать () + `, которая останавливает выполнение программы в тот момент, когда он вызывается, и предоставляет вам интерактивную консоль. так что вы можете проверить текущее состояние вашей программы.

Функция с ее возможными параметрами:

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)

Эта функция выполняет цикл чтения-чтения-печати и создает экземпляр объекта https://docs.python.org/3/library/code.html#code.InteractiveConsole [+ InteractiveConsole + class], который эмулирует поведение интерактивного интерпретатора Python.

Необязательные параметры следующие:

  • + banner + можно установить на string, чтобы вы могли указать, где запускается интерпретатор

  • + readfunc + может использоваться как https://docs.python.org/3/library/code.html#code.InteractiveConsole.raw_input [+ InteractiveConsole.raw_input () + метод]

  • + local + установит пространство имен по умолчанию для цикла интерпретатора

  • + exitmsg + может быть установлен в строку, чтобы отметить, где заканчивается интерпретатор

С параметром + local + вы можете использовать, например:

  • + local = locals () + для локального пространства имен

  • + local = globals () + для глобального пространства имен

  • + local = dict (globals (), ** locals ()) + для использования как глобального пространства имен, так и текущего локального пространства имен

Обратите внимание, что параметр + exitmsg + является новым для Python 3.6, поэтому, если вы используете более старую версию Python, обновите ее или не используйте параметр + exitmsg +.

Вы можете поместить функцию + взаимодействовать () + в любом месте вашей программы для запуска интерактивного интерпретатора в коде.

Работа с модулем + code +

Давайте посмотрим на это в контексте программы остатков на банковских счетах, которая называется + balances.py +. Мы установим для параметра + local + значение + locals () +, чтобы установить для пространства имен значение local.

balances.py

# Import code module
import code

bal_a = 2324
bal_b = 0
bal_c = 409
bal_d = -2

account_balances = [bal_a, bal_b, bal_c, bal_d]


def display_bal():
   for balance in account_balances:
       if balance < 0:
           print("Account balance of {} is below 0; add funds now."
                 .format(balance))

       elif balance == 0:
           print("Account balance of {} is equal to 0; add funds soon."
                 .format(balance))

       else:
           print("Account balance of {} is above 0.".format(balance))

# Use interact() function to start the interpreter with local namespace
code.interact(local=locals())

display_bal()

Мы использовали функцию + code.interact () + с параметром + local = locals () +, чтобы использовать локальное пространство имен в качестве значения по умолчанию в цикле интерпретатора.

Давайте запустим программу выше, используя команду + python3 +, если мы не в виртуальной среде, или команду + python +, если мы:

python balances.py

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

Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Ваш курсор будет помещен в конец строки + >>> +, как в интерактивной оболочке Python.

Отсюда вы можете выполнять вызовы для печати переменных, функций и т. Д .:

>>>
409
>>>
[2324, 0, 409, -2]
>>>
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.
None
>>>
<function display_bal at 0x104b80f28>
>>>

Мы видим, что, используя локальное пространство имен, мы можем напечатать переменные и вызвать функцию. Последний вызов + print () + показывает расположение функции + display_bal + в памяти компьютера.

Если вы довольны тем, что смогли проверить, работая с интерпретатором, вы можете нажать + CTRL + D + для систем * nix или + CTRL + Z + для систем на базе Windows, чтобы выйти из консоли. и продолжить выполнение программы.

Если вы хотите покинуть консоль, не запуская оставшуюся часть программы, вы можете сделать это, набрав + quit () +, и программа будет прервана.

Чтобы использовать параметры + banner + и + exitmsg +, мы можем сделать это следующим образом:

balances.py

...
# Use interact() function to start the interpreter
code.interact(banner="Start", local=locals(), exitmsg="End")

display_bal()

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

Start
>>>

Использование параметра + banner + может позволить вам установить несколько точек в вашем коде и дать вам возможность их идентифицировать. Например, у вас может быть + banner +, который печатает + 'в [for-loop] (https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python -3) "+ с помощью + exitmsg +, который печатает " Out-for-loop ", так что вы можете точно сказать, где вы находитесь в коде.

Отсюда мы можем использовать переводчика как обычно. Как только мы введем + CTRL + D + для выхода из интерпретатора, мы получим сообщение о выходе и функция запустится:

End
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.

Программа полностью запущена после интерактивного сеанса.

Как только вы закончили использовать модуль + code + для отладки вашего кода, вы должны удалить функции + code + и оператор import, чтобы ваша программа работала как обычно. Модуль + code + предоставляет утилиту, поэтому, как только вы закончите, важно убрать за собой.

Заключение

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

Чтобы узнать больше о других методах, которые вы можете использовать для отладки своего кода Python, прочитайте наш учебник на how для использования Python отладчик + pdb + и наш учебник на how для использования ведения журнала.