0. До появления ошибки: Подсветка синтаксиса и форматирование кода
Даже перед тем, как перейти к SyntaxError
, необходимо выполнить важные измерения для SyntaxErrors
, потому что лучший способ справиться с SyntaxErrors
- это избежать их. на первом месте. Это можно сделать в первую очередь с помощью редактора или интегрированной среды разработки (IDE), которая имеет подсветку синтаксиса для Python.
Кроме того, мы можем уменьшить риск столкновения сSyntaxError
хорошим кодом и стилем форматирования. Существует формальное определение термина «хороший стиль форматирования», PEP 8 - Руководство по стилю для кода Python . Правильное форматирование делает наш код более читабельным, что снижает риск написания кода, что приводит к SyntaxError
.
. Очень хорошим способом применить хорошее форматирование к нашему коду является использование инструмента автоматического форматирования кода. Форматировщик кода имеет несколько преимуществ, среди которых следующие: его форматирование кода является последовательным. Он применяет лучшие практики, о которых вы, возможно, даже не подумали. Это очень удобно.
Для Python черный - отличный инструмент для форматирования кода.
1. Понять сообщение об ошибке
Синтаксическая ошибка указывает, в каком файле и в какой строке интерпретатор столкнулся с проблемой в нашем коде. Мы должны использовать эту информацию, чтобы найти ошибку.
Мы должны знать, что интерпретатор Python иногда указывает SyntaxError
в строке после фактической проблемы. Это связано с тем, что синтаксический анализатор ожидает что-то в ошибочной строке и может распознать, что этого не хватает, только когда была проанализирована вся строка. Пример прототипа для такого рода SyntaxError
- это отсутствующая скобка. Так, например, следующий код вызывает SyntaxError
в строке 2
, даже если ошибка находится в строке 1
:
bar = foo(
baz()
EOL означает «Конец строки». Это помогает понять очень распространенный
SyntaxError: EOL while scanning string literal
. Обычно это происходит, когда вы неправильно закрыли определение строки с помощью закрывающих кавычек, например, в следующем примере:
foo = "bar
2. Упрощение кода
Как правило, хорошей стратегией исправления ошибок является сокращение любого кода, который выдает ошибку или исключение (или который не возвращает ожидаемый результат), до минимального примера . (Это требование для вопросов здесь о переполнении стека, но гораздо более того, это хороший метод для определения ошибки.)
В случае SyntaxError
, создание минимального примера обычноочень просто, потому что SyntaxError
не зависит ни от значений переменной, ни от состояния объекта, ни от любой другой семантики вашего кода. Вот почему источником SyntaxError
обычно является одна строка кода.
Итак, чтобы выявить ошибку, мы удалим весь код, кроме строки, которую мы считаем источником ошибки. Если ошибка исчезает, значит, она была в другой строке. Если Ошибка не устранена, мы пытаемся упростить эту строку. Например, мы заменяем вложенные скобки, определяя промежуточные переменные, которые содержат значения:
Вместо
bar = foo(foo(baz(foo()))
следующий (логически эквивалентный) код:
first = foo()
second = baz(first)
third = foo(second)
bar = foo(third
Нам намного легче определить отсутствующие закрывающие скобки.