Python: Синтаксические ошибки
Если программа на Python написана синтаксически некорректно, то интерпретатор выводит на экран соответствующее сообщение. Также он указывает на файл и строчку, где произошла ошибка.
Синтаксическая ошибка возникает в том случае, когда код записали с нарушением грамматических правил. В естественных языках грамматика важна, но текст с ошибками обычно можно понять и прочитать. В программировании все строго. Мельчайшее нарушение — и программа даже не запустится. Примером может быть забытая ; , неправильно расставленные скобки и другие детали.
Вот пример кода с синтаксической ошибкой:
print('Hodor)
Если запустить код выше, то мы увидим следующее сообщение:
$ python index.py File "index.py", line 1 print('Hodor) ^ SyntaxError: EOL while scanning string literal
С одной стороны, ошибки синтаксиса — самые простые, потому что они связаны с грамматическими правилами написания кода, а не со смыслом кода. Их легко исправить: нужно лишь найти нарушение в записи. С другой стороны, интерпретатор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке.
Задание
Это задание не связано с уроком напрямую. Но будет полезным потренироваться с выводом на экран.
Выведите на экран:
What Is Dead May Never Die
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Синтаксическая ошибка — нарушение грамматических правил языка программирования.
- SyntaxError (ошибка парсинга) — тип ошибок в Python, возникающих при наличии синтаксических ошибок в коде.
Ошибка в коде python как исправить?
IndentationError: expected an indented block
Как исправить?
- Вопрос задан более трёх лет назад
- 1706 просмотров
Комментировать
Решения вопроса 1
Делаю графику для кино. Роботы, взрывы, пиу-пиу!
Расставить отступы, в Питоне они важны
def getConfig(): with open("config.json", "rb") as f: data_file = f.read().decode("UTF-8") data = json.load(data_file) return data
Ответ написан более трёх лет назад
Нравится 5 1 комментарий
def getConfig(): with open("config.json", "rb") as f: data_file = f.read().decode("UTF-8") data = json.load(data_file) return data
Ответы на вопрос 1
Питон вокруг меня
Попробуйте использовать гугл, у вас есть код ошибки, нужно взять скопировать ‘IndentationError’, потом навести курсор на поисковую строку гугла, вставить код ошибки, нажать Enter. В первых 4 ссылках будет ответ.
Далее нужно вернутся на 32 строчку вашего скрипта и исправить эту ошибку.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
Палиндромы leetcode, в VS все правильно, на сайте другой ответ, что делать?
- 1 подписчик
- 3 часа назад
- 58 просмотров
Исправить ошибки в программе python
ТЗ: Необходимо исправить ошибки в коде,внести корректировки, чтобы программа заработала. Сначала получить у человека ожидаемое число баллов. После этого программа вычисляет свой ориентир: если число меньше 50, то оно удваивается. Если число больше или равно 50, то ориентиром будет число 100. Также выбирается, какой текст напечатать, в зависимости от введённого числа. В результате печатается этот текст и число. Например, если введено 35, программа ответит: «А постарайся набрать 70 баллов!». Если введено 70, программа ответит: «Давай стремиться к максимуму: 100 баллов!» `
a = input "Сколько баллов ты рассчитываешь набрать в этом тесте?" if a < 50: a = 2 * a s = "А постарайся набрать " else: a = 100 s = "Давай стремиться к максимуму: " print s + str(a) + " баллов!"
Отслеживать
задан 30 янв 2020 в 16:38
11 1 1 бронзовый знак
Что у Вас не получается, укажите в вопросе, будьте так добры.
30 янв 2020 в 16:41
необходимо исправить код, чтобы он работал
30 янв 2020 в 16:44
В каком месте у Вас возникли проблемы, укажите, пожалуйста.
30 янв 2020 в 16:46
В этом и проблема, я не знаю что где и как исправлять
30 янв 2020 в 16:51
Код работает? Нет. Если нет, то в чем это выражается? Если выдает ошибку (а он выдает), то в самую первую очередь необходимо прочитать текст этой ошибки.. Если непонятно, что он означает, то вбить в поисковик и почитать пару ссылок, там будет разъяснено, что это за ошибка и как ее исправлять. У вас не возникнет НИ ОДНОЙ ошибки, которая не была бы уже 100500 раз описана в интернетах. Так нужно делать до тех пор, пока не перестанут появляется ошибки. Если после этого код все еще работает не так, как вам хочется, то вот тогда можно начинать спрашивать.
Борьба с багами
Следующий код определяет функцию add_underscores(), принимающую в качестве аргумента строковый объект и возвращающую новую строку – копию слова с каждым символом, окруженным подчеркиванием. Например, add_underscores("python") вернет «_p_y_t_h_o_n_» .
Вот неработающий код:
Запустим. Выполнение останавливается на строке с определением функции.
Нажмите кнопку Go, чтобы выполнить код до точки останова:
Код останавливается перед циклом for в функции add_underscores(). Обратите внимание, что на панели Locals отображаются две локальные переменные – word со значением «hello», и new_word со значением «_»,
Нажмите кнопку Step, чтобы войти в цикл for. Окно отладки изменится, и новая переменная i со значением 0 отобразится на панели Locals:
Переменная i – это счетчик для цикла for, который можно использовать, чтобы отслеживать активную на данный момент итерацию.
Нажмите кнопку Step еще раз и посмотрите на панель Locals – переменная new_word приняла значение «h_»:
Это неправильно т. к. сначала в new_word было значение «_», на второй итерации цикла for в ней должно быть «_h_». Если нажать Step еще несколько раз, то увидим, что в new_word попадает значение e_, затем l_ и так далее.
Шаг 3: Определение ошибки и исправление
Как мы уже выяснили – на каждой итерации цикла new_word перезаписывается следующим символом в строке «hello» и подчеркиванием. Поскольку внутри цикла есть только одна строка кода, проблема должна быть именно там:
new_word = word[i] + "_"
Код указывает Python получить следующий символ word, прикрепить подчеркивание и назначить новую строку переменной new_word. Это именно то неверное поведение, которое мы наблюдали.
Чтобы все починить, нужно объединить word[i] + " _" с существующим значением new_word. Нажмите кнопку Quit в окне отладки, но не закрывайте его. Откройте окно редактора и измените строку внутри цикла for на следующую:
new_word = new_word + word[i] + "_"
Примечание: Если бы вы закрыли отладчик, не нажав кнопку Quit, при повторном открытии окна отладки могла появиться ошибка:
You can only toggle the debugger when idle
Всегда нажимайте кнопку Go или Quit, когда заканчиваете отладку, иначе могут возникнуть проблемы с ее повторным запуском.
Шаг 4: повторение шагов 1-3, пока ошибка не исчезнет
Сохраните изменения в программе и запустите ее снова. В окне отладки нажмите кнопку Go, чтобы выполнить код до точки останова. Понажимайте Step несколько раз и смотрите, что происходит с переменной new_word на каждой итерации – все работает, как положено. Иногда необходимо повторять этот процесс несколько раз, прежде чем исправится ошибка.
Альтернативные способы поиска ошибок
Использование отладчика может быть сложным и трудоемким, но это самый надежный способ найти ошибки в коде. Однако отладчики не всегда есть в наличии. В подобных ситуациях можно использовать print debugging для поиска ошибок в коде. PD задействует функцию print() для отображения в консоли текста, указывающего место выполнения программы и состояние переменных.
Например, вместо отладки предыдущего примера можно добавить следующую строку в конец цикла for:
print(f"i = ; new_word = ")
Измененный код будет выглядеть следующим образом:
def add_underscores(word): new_word = "_" for i in range(len(word)): new_word = word[i] + "_" print(f"i = ; new_word = ") return new_word phrase = "hello" print(add_underscores(phrase))
Вывод должен выглядеть так:
i = 0; new_word = h_ i = 1; new_word = e_ i = 2; new_word = l_ i = 3; new_word = l_ i = 4; new_word = o_ o_
PD работает, но имеет несколько недостатков по сравнению с отладкой дебаггером. Вы должны запускать всю программу каждый раз, когда хотите проверить значения переменных, а также помнить про удаление вызовов функций print().
Один из способов улучшить наш цикл – перебирать символы в word:
def add_underscores(word): new_word = "_" for letter in word: new_word = new_word + letter + "_" return new_word
Заключение
Теперь вы знаете все об отладке с помощью DLE. Вы можете использовать этот принцип с различными дебагерами.
В статье мы разобрали следующие темы:
- использование окна управления отладкой;
- установку точки останова для глубокого понимания работы кода;
- применение кнопок Step, Go, Over и Out;
- четырехэтапный процессом выявления и удаления ошибок.
Не останавливайтесь в обучении и практикуйте дебаггинг – это весело!
- ТОП-10 книг по Python: эффективно, емко, доходчиво
- Парсинг сайтов на Python: подробный видеокурс и программный код
- Python + Visual Studio Code = успешная разработка
- 29 Python-проектов, оказавших огромное влияние на разработку
- 15 вопросов по Python: как джуниору пройти собеседование