Вступление
-
Отладка * - это часть процесса разработки программного обеспечения, где программисты ищут, а затем решают проблемы, мешающие правильной работе программного обеспечения.
Полезный и быстрый инструмент для отладки - это 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 для использования ведения журнала.