Рубрики
Без рубрики

Эффективная отладка с помощью операторов Python и Print

Что делать, если ваш код не работает? Вот учебник, в котором вы узнаете, как эффективно отлаживать операторы Python и Print.

Автор оригинала: allisonf.

Как отлаживать, для начинающих

Когда вы только начинаете программировать, вы совершаете много ошибок-ваш код не всегда работает!

Когда вы опытный программист, вы допускаете ошибки, и ваш код не всегда работает.

Всем нужны навыки отладки.

Отладка: Что Это Такое?

Отладка – это процесс выяснения того, что происходит не так с вашим кодом.

Существует множество способов отладки. В этом уроке будет рассказано об одном конкретном способе: отладка оператора печати .

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

Как отлаживать С помощью Инструкций печати

Отладка – это просмотр значений переменных в определенное время.

При отладке оператора print вы не делаете ничего , кроме использования оператора print .

Давайте познакомимся с заявлением print , это не займет много времени:

print "Hello, world!"

Это печатает строку. Вы также можете печатать числа или объекты. В общем случае вы можете вывести значения переменных

Я написал это жирно и косо, чтобы вы поняли, что все, что вам нужно запомнить, и вы знаете, как отлаживать инструкции. Остальная часть этого урока будет посвящена методам эффективной отладки:

  • Какой код читать
  • Как найти источник вашей ошибки

На какие переменные Следует Обратить внимание?

Посмотрите на тех, кто, кажется, плохо себя ведет.

Отладка-это не просто выполнение кода. Это также требует чтения вашего кода.

  • Прочитайте свой код , и
  • Прочитайте сообщения об ошибках

Какой Код Вы Должны Прочитать?

Вы должны иметь некоторое представление об общей области кода, в которой происходит ваша ошибка: сопоставьте пользовательский опыт с кодом, связанным с ним.

Оттуда вы можете сузить поиск: Поместите инструкции печати с номерами строк и именами файлов, чтобы вы знали, “где” вы находитесь в коде

Пример прояснит, что я имею в виду. Числа в примерах кода являются просто номерами строк файла и не должны быть частью кода.

Пример Кода

Вот наш кодекс поведения:

1  #File1.py
2 
3  def foo():
4      return 6
5
6  x = foo()
7  for i in [1, 2, 4, 6, 5]:
8      x += i
9
10  if x > 23:
11     print "Welcome!"      

Это очень просто и довольно надуманно. Давайте представим, что foo на самом деле была очень сложной функцией, и мы не были уверены, что она возвращает. Давайте также сделаем вид, что мы не ожидали, что этот код будет напечатан Добро пожаловать! (Это так. Попробуйте это.)

Примечание: в нашем коде уже есть некоторые операторы печати. print операторы по своей сути не являются отладочными операторами печати.

Добавление отладочных инструкций Печати

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

Мы могли бы перейти ко всем частям нашего кода, где Добро пожаловать! был напечатан и добавьте инструкцию отладки прямо над строками кода, которые печатают Добро пожаловать!

Давайте посмотрим, как это будет выглядеть:

10  if x > 23:
11     print "Debugging: File1.py, line 11"
12     print "Welcome!"

Теперь, вместо того, чтобы просто видеть Добро пожаловать! напечатано, мы увидим, что будет напечатано следующее:

Debugging: File1.py, line 11
Welcome!

С помощью этого вывода мы точно знаем, что ваша ошибка или неожиданное поведение происходит в File1.py.

Посмотрев чуть выше строки 11, мы увидим, что оператор print “Welcome!” управляется оператором if в строке 10. Таким образом, мы знаем, что переменная x представляет для нас интерес.

Работа в обратном направлении для отслеживания ошибки

Первое , что я бы сделал, – это напечатал значение x сразу после его установки и до его использования:

10 print x
11 if x > 23:
12     print "Debugging: File1.py, line 12"
13     print "Welcome!"

Запустив нашу программу, мы сейчас увидим:

24
Debugging: File1.py, line 12
Welcome!

Это хорошо знать. Мы больше не удивляемся, увидев, что если x > 23 оценивается в Правда (и так Добро пожаловать! печатается), но нам нужно знать больше.

Как получилось, что x стало 24? Чтобы понять это, мы работаем в обратном направлении .

Как Нам Это Сделать?

Мы видим, что значение x первоначально устанавливается в строке 6, а затем дополнительно изменяется в строке 8, которая повторяется несколько раз.

Ясно, что строки 7 и 8 добавят 18 к тому, что вернет foo .

Помните, мы притворяемся, что foo является сложной функцией, и мы не знаем, что она возвращает.

Таким образом, мы могли бы вставить оператор печати в строку 7, чтобы напечатать значение x . Тогда мы увидим, что foo возвращает 6.

Притворимся, что мы удивлены этим. Мы могли бы продолжить работу в обратном направлении-мы бы нашли определение foo и начали добавлять операторы печати в it , чтобы понять, почему foo возвращает 6.

Резюме

  1. Используйте инструкции печати для проверки поведения кода. Это отладка оператора печати

  2. Найдите, какая область вашего кода вызывает проблему, напечатав номера строк (и имена файлов) в областях, которые, как вы подозреваете, могут быть источником ошибки.

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

  4. Работайте в обратном направлении, чтобы отследить источник значений этих переменных.

  5. Повторяйте шаги 2-5, пока вы не поймете поведение ошибки .

Наконец: Всегда читайте свои сообщения об ошибках .

Мы Меняем То, Что Изучаем

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

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