7 распространенных причин, почему программа на Python не запускается
Python — это один из самых популярных языков программирования в мире, который используется для различных задач от веб-разработки до машинного обучения. Однако, по мере того, как программа становится более сложной, возникают проблемы с её запуском. В этой статье мы рассмотрим 7 распространенных причин, почему программа на Python не запускается и как их решить.
1. Ошибки синтаксиса
Возможно, самая распространенная причина, почему программа на Python не запускается, связана с ошибками синтаксиса. Даже небольшая ошибка может привести к тому, что программа не запустится и выдаст ошибку. Чтобы исправить проблему, вам необходимо проанализировать код, найти ошибку и исправить её.
2. Ошибки импорта
Еще одна распространенная причина — это ошибки импорта. Если вы используете какой-то модуль в своей программе и он не импортируется правильно, то программа не запустится. Проверьте, правильно ли вы написали название модуля и находится ли модуль в нужном каталоге.
3. Неправильный путь к файлу
Программа на Python может не запуститься, если вы указали неправильный путь к файлу. Убедитесь, что путь к файлу указан правильно и файл находится в нужном месте.
4. Недостаточно памяти
Если программа на Python очень большая и использует много памяти, то она может просто не запуститься из-за нехватки памяти. Попробуйте уменьшить количество используемой памяти или увеличьте объем доступной памяти на вашем компьютере.
5. Конфликты версий Python
Если на вашем компьютере установлено несколько версий Python, то программа может не запуститься из-за конфликтов версий. Убедитесь, что вы используете правильную версию Python для запуска вашей программы.
6. Программа занята другим процессом
Ваша программа может не запуститься, если она занята другим процессом. Проверьте, нет ли других процессов, которые используют те же ресурсы, что и ваша программа.
7. Ошибка установки библиотек
Если ваша программа использует сторонние библиотеки, то возможно, что они не были установлены правильно. Убедитесь, что вы правильно установили все необходимые библиотеки и они находятся в нужном месте.
Заключение
В статье были рассмотрены 7 распространенных причин, почему программа на Python не запускается. Надеемся, что эта информация была вам полезна и поможет вам решить проблемы с запуском ваших программ на Python.
Неверный синтаксис в Python: общие причины SyntaxError
Неверный синтаксис в Python: общие причины SyntaxError
Python известен своим простым синтаксисом. Однако, когда вы изучаете Python в первый раз или когда вы попали на Python с большим опытом работы на другом языке программирования, вы можете столкнуться с некоторыми вещами, которые Python не позволяет. Если вы когда-либо получали + SyntaxError + при попытке запустить код Python, то это руководство может вам помочь. В этом руководстве вы увидите общие примеры неправильного синтаксиса в Python и узнаете, как решить эту проблему.
Неверный синтаксис в Python
Когда вы запускаете ваш код Python, интерпретатор сначала анализирует его, чтобы преобразовать в байтовый код Python, который он затем выполнит. Интерпретатор найдет любой недопустимый синтаксис в Python на этом первом этапе выполнения программы, также известном как этап синтаксического анализа . Если интерпретатор не может успешно проанализировать ваш код Python, это означает, что вы использовали неверный синтаксис где-то в вашем коде. Переводчик попытается показать вам, где произошла эта ошибка.
Когда вы изучаете Python в первый раз, может быть неприятно получить + SyntaxError + . Python попытается помочь вам определить, где в вашем коде указан неверный синтаксис, но предоставляемый им traceback может немного сбить с толку. Иногда код, на который он указывает, вполне подходит.
Вы не можете обрабатывать неправильный синтаксис в Python, как и другие исключения. Даже если вы попытаетесь обернуть блок + try + и + кроме + вокруг кода с неверным синтаксисом, вы все равно увидите, что интерпретатор вызовет + SyntaxError + .
+ SyntaxError + Исключение и трассировка
Когда интерпретатор обнаруживает неверный синтаксис в коде Python, он вызовет исключение + SyntaxError + и предоставит трассировку с некоторой полезной информацией, которая поможет вам отладить ошибку. Вот некоторый код, который содержит недопустимый синтаксис в Python:
Вы можете увидеть недопустимый синтаксис в литерале словаря в строке 4. Во второй записи + ‘jim’ + пропущена запятая. Если вы попытаетесь запустить этот код как есть, вы получите следующую трассировку:
Обратите внимание, что сообщение трассировки обнаруживает ошибку в строке 5, а не в строке 4. Интерпретатор Python пытается указать, где находится неправильный синтаксис. Тем не менее, он может только указать, где он впервые заметил проблему. Когда вы получите трассировку + SyntaxError + и код, на который указывает трассировка, выглядит нормально, тогда вы захотите начать движение назад по коду, пока не сможете определить, что не так.
В приведенном выше примере нет проблемы с запятой, в зависимости от того, что следует после нее. Например, нет проблемы с отсутствующей запятой после + ‘michael’ + в строке 5. Но как только переводчик сталкивается с чем-то, что не имеет смысла, он может лишь указать вам на первое, что он обнаружил, что он не может понять.
Существует несколько элементов трассировки + SyntaxError + , которые могут помочь вам определить, где в вашем коде содержится неверный синтаксис:
Имя файла , где встречается неверный синтаксис
Номер строки и воспроизводимая строка кода, где возникла проблема
Знак ( + ^ + ) в строке ниже воспроизводимого кода, который показывает точку в коде, которая имеет проблему
Сообщение об ошибке , которое следует за типом исключения + SyntaxError + , которое может предоставить информацию, которая поможет вам определить проблему
В приведенном выше примере имя файла было + theofficefacts.py + , номер строки был 5, а каретка указывала на закрывающую кавычку из словарного ключа + michael + . Трассировка + SyntaxError + может не указывать на реальную проблему, но она будет указывать на первое место, где интерпретатор не может понять синтаксис.
Есть два других исключения, которые вы можете увидеть в Python. Они эквивалентны + SyntaxError + , но имеют разные имена:
Оба эти исключения наследуются от класса + SyntaxError + , но это особые случаи, когда речь идет об отступе. + IndentationError + возникает, когда уровни отступа вашего кода не совпадают. + TabError + возникает, когда ваш код использует и табуляцию, и пробелы в одном файле. Вы познакомитесь с этими исключениями более подробно в следующем разделе.
Общие проблемы с синтаксисом
Когда вы впервые сталкиваетесь с + SyntaxError + , полезно знать, почему возникла проблема и что вы можете сделать, чтобы исправить неверный синтаксис в вашем коде Python. В следующих разделах вы увидите некоторые из наиболее распространенных причин, по которым может быть вызвано «+ SyntaxError +», и способы их устранения.
Неправильное использование оператора присваивания ( + = + )
В Python есть несколько случаев, когда вы не можете назначать объекты. Некоторые примеры присваивают литералам и вызовам функций. В приведенном ниже блоке кода вы можете увидеть несколько примеров, которые пытаются это сделать, и получающиеся в результате трассировки + SyntaxError + :
Первый пример пытается присвоить значение + 5 + вызову + len () + . Сообщение + SyntaxError + очень полезно в этом случае. Он говорит вам, что вы не можете присвоить значение вызову функции.
Второй и третий примеры пытаются присвоить литералам строку и целое число. То же правило верно и для других литеральных значений. И снова сообщения трассировки указывают, что проблема возникает, когда вы пытаетесь присвоить значение литералу.
Вероятно, ваше намерение не состоит в том, чтобы присвоить значение литералу или вызову функции. Например, это может произойти, если вы случайно пропустите дополнительный знак равенства ( + = + ), что превратит назначение в сравнение. Сравнение, как вы можете видеть ниже, будет правильным:
В большинстве случаев, когда Python сообщает вам, что вы делаете присвоение чему-то, что не может быть назначено, вы сначала можете проверить, чтобы убедиться, что оператор не должен быть логическим выражением. Вы также можете столкнуться с этой проблемой, когда пытаетесь присвоить значение ключевому слову Python, о котором вы расскажете в следующем разделе.
Неправильное написание, отсутствие или неправильное использование ключевых слов Python
Ключевые слова Python — это набор защищенных слов , которые имеют особое значение в Python. Это слова, которые вы не можете использовать в качестве идентификаторов, переменных или имен функций в своем коде. Они являются частью языка и могут использоваться только в контексте, который допускает Python.
Существует три распространенных способа ошибочного использования ключевых слов:
Неправильное написание ключевое слово
Отсутствует ключевое слово
Неправильное использование ключевого слова
Если вы неправильно написали ключевое слово в своем коде Python, вы получите + SyntaxError + . Например, вот что происходит, если вы пишете ключевое слово + for + неправильно:
Сообщение читается как + SyntaxError: неверный синтаксис + , но это не очень полезно. Трассировка указывает на первое место, где Python может обнаружить, что что-то не так. Чтобы исправить эту ошибку, убедитесь, что все ваши ключевые слова Python написаны правильно.
Другая распространенная проблема с ключевыми словами — это когда вы вообще их пропускаете:
Еще раз, сообщение об исключении не очень полезно, но трассировка действительно пытается указать вам правильное направление. Если вы отойдете от каретки, то увидите, что ключевое слово + in + отсутствует в синтаксисе цикла + for + .
Вы также можете неправильно использовать защищенное ключевое слово Python. Помните, что ключевые слова разрешено использовать только в определенных ситуациях. Если вы используете их неправильно, у вас будет неправильный синтаксис в коде Python. Типичным примером этого является использование https://realpython.com/python-for-loop/#the-break-and-continue-statements [ + continue + или + break + ] вне цикла. Это может легко произойти во время разработки, когда вы реализуете вещи и когда-то перемещаете логику за пределы цикла:
Здесь Python отлично говорит, что именно не так. Сообщения » ‘break’ вне цикла » и » ‘continue’ не в цикле должным образом » помогут вам точно определить, что делать. Если бы этот код был в файле, то Python также имел бы курсор, указывающий прямо на неправильно использованное ключевое слово.
Другой пример — если вы пытаетесь назначить ключевое слово Python переменной или использовать ключевое слово для определения функции:
Когда вы пытаетесь присвоить значение + pass + , или когда вы пытаетесь определить новую функцию с именем + pass + , вы получите ` + SyntaxError + и снова увидеть сообщение + «неверный синтаксис» + `.
Может быть немного сложнее решить этот тип недопустимого синтаксиса в коде Python, потому что код выглядит хорошо снаружи. Если ваш код выглядит хорошо, но вы все еще получаете + SyntaxError + , то вы можете рассмотреть возможность проверки имени переменной или имени функции, которое вы хотите использовать, по списку ключевых слов для версии Python, которую вы используете.
Список защищенных ключевых слов менялся с каждой новой версией Python. Например, в Python 3.6 вы можете использовать + await + в качестве имени переменной или имени функции, но в Python 3.7 это слово было добавлено в список ключевых слов. Теперь, если вы попытаетесь использовать + await + в качестве имени переменной или функции, это вызовет + SyntaxError + , если ваш код для Python 3.7 или более поздней версии.
Другим примером этого является + print + , который отличается в Python 2 от Python 3:
+ print + — это ключевое слово в Python 2, поэтому вы не можете присвоить ему значение. Однако в Python 3 это встроенная функция, которой можно присваивать значения.
Вы можете запустить следующий код, чтобы увидеть список ключевых слов в любой версии Python, которую вы используете:
+ keyword + также предоставляет полезную + keyword.iskeyword () + . Если вам просто нужен быстрый способ проверить переменную + pass + , то вы можете использовать следующую однострочную строку:
Этот код быстро сообщит вам, является ли идентификатор, который вы пытаетесь использовать, ключевым словом или нет.
Отсутствующие скобки, скобки и цитаты
Часто причиной неправильного синтаксиса в коде Python являются пропущенные или несовпадающие закрывающие скобки, скобки или кавычки. Их может быть трудно обнаружить в очень длинных строках вложенных скобок или длинных многострочных блоках. Вы можете найти несоответствующие или пропущенные кавычки с помощью обратных трассировок Python:
Здесь трассировка указывает на неверный код, где после закрывающей одинарной кавычки стоит + t ‘+ . Чтобы это исправить, вы можете сделать одно из двух изменений:
Escape одиночная кавычка с обратной косой чертой ( + ‘don \’ t ‘+ )
Окружить всю строку в двойных кавычках ( » не » )
Другая распространенная ошибка — забыть закрыть строку. Как для строк с двойными, так и с одинарными кавычками ситуация и обратная трассировка одинаковы:
Здесь, ссылка на словарь + ages + внутри напечатанной f-строки пропускает закрывающую двойную кавычку из ссылки на ключ. Итоговая трассировка выглядит следующим образом:
Python идентифицирует проблему и сообщает, что она существует внутри f-строки. Сообщение » неопределенная строка » также указывает на проблему. Каретка в этом случае указывает только на начало струны.
Это может быть не так полезно, как когда каретка указывает на проблемную область струны, но она сужает область поиска. Где-то внутри этой f-строки есть неопределенная строка. Вы просто должны узнать где. Чтобы решить эту проблему, убедитесь, что присутствуют все внутренние кавычки и скобки f-строки.
Ситуация в основном отсутствует в скобках и скобках. Например, если вы исключите закрывающую квадратную скобку из списка, Python обнаружит это и укажет на это. Однако есть несколько вариантов этого. Первый — оставить закрывающую скобку вне списка:
Когда вы запустите этот код, вам скажут, что есть проблема с вызовом + print () + :
Здесь происходит то, что Python думает, что список содержит три элемента: + 1 + , + 2 + и +3 print (foo ()) + . Python использует whitespace для логической группировки вещей, и потому что нет запятой или скобки, отделяющей + 3 + от `+ print (foo ()) + `, Python объединяет их вместе как третий элемент списка.
Еще один вариант — добавить запятую после последнего элемента в списке, оставляя при этом закрывающую квадратную скобку:
Теперь вы получаете другую трассировку:
В предыдущем примере + 3 + и + print (foo ()) + были объединены в один элемент, но здесь вы видите запятую, разделяющую два. Теперь вызов + print (foo ()) + добавляется в качестве четвертого элемента списка, и Python достигает конца файла без закрывающей скобки. В трассировке говорится, что Python дошел до конца файла (EOF), но ожидал чего-то другого.
В этом примере Python ожидал закрывающую скобку ( +] + ), но повторяющаяся строка и каретка не очень помогают. Отсутствующие круглые скобки и скобки сложно определить Python. Иногда единственное, что вы можете сделать, это начать с каретки и двигаться назад, пока вы не сможете определить, чего не хватает или что нет.
Ошибочный синтаксис словаря
Вы видели ссылку: # syntaxerror-exception-and-traceback [ранее], чтобы вы могли получить + SyntaxError + , если не указывать запятую в словарном элементе. Другая форма недопустимого синтаксиса в словарях Python — это использование знака равенства ( + = + ) для разделения ключей и значений вместо двоеточия:
Еще раз, это сообщение об ошибке не очень полезно. Повторная линия и каретка, однако, очень полезны! Они указывают прямо на характер проблемы.
Этот тип проблемы распространен, если вы путаете синтаксис Python с синтаксисом других языков программирования. Вы также увидите это, если перепутаете определение словаря с вызовом + dict () + . Чтобы это исправить, вы можете заменить знак равенства двоеточием. Вы также можете переключиться на использование + dict () + :
Вы можете использовать + dict () + для определения словаря, если этот синтаксис более полезен.
Использование неправильного отступа
Существует два подкласса + SyntaxError + , которые конкретно занимаются проблемами отступов:
В то время как другие языки программирования используют фигурные скобки для обозначения блоков кода, Python использует whitespace. Это означает, что Python ожидает, что пробелы в вашем коде будут вести себя предсказуемо. Он вызовет + IndentationError + , если в блоке кода есть строка с неправильным количеством пробелов:
Это может быть сложно увидеть, но в строке 5 есть только два пробела с отступом. Он должен соответствовать выражению цикла + for + , которое на 4 пробела больше. К счастью, Python может легко определить это и быстро расскажет вам, в чем проблема.
Здесь также есть некоторая двусмысленность. Является ли строка + print (‘done’) + after циклом + for + или inside блоком цикла + for + ? Когда вы запустите приведенный выше код, вы увидите следующую ошибку:
Хотя трассировка выглядит во многом как трассировка + SyntaxError + , на самом деле это + IndentationError + . Сообщение об ошибке также очень полезно. Он говорит вам, что уровень отступа строки не соответствует ни одному другому уровню отступа. Другими словами, + print (‘done’) + это отступ с двумя пробелами, но Python не может найти любую другую строку кода, соответствующую этому уровню отступа. Вы можете быстро это исправить, убедившись, что код соответствует ожидаемому уровню отступа.
Другой тип + SyntaxError + — это + TabError + , который вы будете видеть всякий раз, когда есть строка, содержащая либо табуляцию, либо пробелы для отступа, в то время как остальная часть файла содержит другую. Это может скрыться, пока Python не покажет это вам!
Если размер вкладки равен ширине пробелов на каждом уровне отступа, то может показаться, что все строки находятся на одном уровне. Однако, если одна строка имеет отступ с использованием пробелов, а другая — с помощью табуляции, Python укажет на это как на проблему:
Здесь строка 5 имеет отступ вместо 4 пробелов. Этот блок кода может выглядеть идеально для вас, или он может выглядеть совершенно неправильно, в зависимости от настроек вашей системы.
Python, однако, сразу заметит проблему. Но прежде чем запускать код, чтобы увидеть, что Python скажет вам, что это неправильно, вам может быть полезно посмотреть пример того, как код выглядит при различных настройках ширины вкладки:
Обратите внимание на разницу в отображении между тремя примерами выше. Большая часть кода использует 4 пробела для каждого уровня отступа, но строка 5 использует одну вкладку во всех трех примерах. Ширина вкладки изменяется в зависимости от настройки tab width :
Если ширина вкладки равна 4 , то оператор + print + будет выглядеть так, как будто он находится вне цикла + for + . Консоль выведет + ‘done’ + в конце цикла.
Если ширина табуляции равна 8 , что является стандартным для многих систем, то оператор + print + будет выглядеть так, как будто он находится внутри цикла + for + . Консоль будет печатать + ‘done’ + после каждого числа.
Если ширина табуляции равна 3 , то оператор + print + выглядит неуместно. В этом случае строка 5 не соответствует ни одному уровню отступа.
Когда вы запустите код, вы получите следующую ошибку и трассировку:
Обратите внимание на + TabError + вместо обычного + SyntaxError + . Python указывает на проблемную строку и дает вам полезное сообщение об ошибке. Это ясно говорит о том, что в одном и том же файле для отступа используется смесь вкладок и пробелов.
Решение этой проблемы состоит в том, чтобы все строки в одном и том же файле кода Python использовали либо табуляции, либо пробелы, но не обе. Для приведенных выше блоков кода исправление будет состоять в том, чтобы удалить вкладку и заменить ее на 4 пробела, которые будут печатать + ‘done’ + после завершения цикла + for + .
Определение и вызов функций
Вы можете столкнуться с неверным синтаксисом в Python, когда вы определяете или вызываете функции. Например, вы увидите + SyntaxError + , если будете использовать точку с запятой вместо двоеточия в конце определения функции:
Трассировка здесь очень полезна, с помощью каретки, указывающей прямо на символ проблемы. Вы можете очистить этот неверный синтаксис в Python, отключив точку с запятой для двоеточия.
Кроме того, ключевые аргументы как в определениях функций, так и в вызовах функций должны быть в правильном порядке. Аргументы ключевых слов always идут после позиционных аргументов. Отказ от использования этого порядка приведет к + SyntaxError + :
Здесь, еще раз, сообщение об ошибке очень полезно, чтобы рассказать вам точно, что не так со строкой.
Изменение версий Python
Иногда код, который прекрасно работает в одной версии Python, ломается в более новой версии. Это связано с официальными изменениями в синтаксисе языка. Наиболее известным примером этого является оператор + print + , который перешел от ключевого слова в Python 2 к встроенной функции в Python 3:
Это один из примеров, где появляется сообщение об ошибке, сопровождающее + SyntaxError + ! Он не только сообщает вам, что в вызове + print + отсутствует скобка, но также предоставляет правильный код, который поможет вам исправить оператор.
Другая проблема, с которой вы можете столкнуться, — это когда вы читаете или изучаете синтаксис, который является допустимым синтаксисом в более новой версии Python, но недопустим в той версии, в которую вы пишете. Примером этого является синтаксис f-string, которого нет в версиях Python до 3.6:
В версиях Python до 3.6 интерпретатор ничего не знает о синтаксисе f-строки и просто предоставляет общее сообщение «» неверный синтаксис «`. Проблема, в данном случае, в том, что код looks прекрасно работает, но он был запущен с более старой версией Python. В случае сомнений перепроверьте, какая версия Python у вас установлена!
Синтаксис Python продолжает развиваться, и в Python 3.8 появилось несколько интересных новых функций:
Если вы хотите опробовать некоторые из этих новых функций, то вам нужно убедиться, что вы работаете в среде Python 3.8. В противном случае вы получите + SyntaxError + .
Python 3.8 также предоставляет новый* + SyntaxWarning + *. Вы увидите это предупреждение в ситуациях, когда синтаксис допустим, но все еще выглядит подозрительно. Примером этого может быть отсутствие запятой между двумя кортежами в списке. Это будет действительный синтаксис в версиях Python до 3.8, но код вызовет + TypeError + , потому что кортеж не может быть вызван:
Этот + TypeError + означает, что вы не можете вызывать кортеж, подобный функции, что, как думает интерпретатор Python, вы делаете.
В Python 3.8 этот код все еще вызывает + TypeError + , но теперь вы также увидите + SyntaxWarning + , который указывает, как вы можете решить проблему:
Полезное сообщение, сопровождающее новый + SyntaxWarning + , даже дает подсказку ( » возможно, вы пропустили запятую? » ), Чтобы указать вам правильное направление!
Заключение
В этом руководстве вы увидели, какую информацию предоставляет обратная связь + SyntaxError + . Вы также видели много распространенных примеров неправильного синтаксиса в Python и каковы решения этих проблем. Это не только ускорит ваш рабочий процесс, но и сделает вас более полезным рецензентом кода!
Когда вы пишете код, попробуйте использовать IDE, который понимает синтаксис Python и предоставляет обратную связь. Если вы поместите многие из недопустимых примеров кода Python из этого руководства в хорошую IDE, то они должны выделить проблемные строки, прежде чем вы даже сможете выполнить свой код.
Получение + SyntaxError + во время изучения Python может быть неприятным, но теперь вы знаете, как понимать сообщения трассировки и с какими формами недопустимого синтаксиса в Python вы можете столкнуться. В следующий раз, когда вы получите + SyntaxError + , у вас будет больше возможностей быстро решить проблему!
Как чинить SyntaxError
SyntaxError — это ошибка, которая легко может ввести в ступор начинающего программиста. Стоит забыть одну запятую или не там поставить кавычку и Python наотрез откажется запускать программу. Что ещё хуже, по выводу в консоль сложно сообразить в чём дело. Выглядят сообщения страшно и непонятно. Что с этим делать — не ясно. Вот неполный список того, что можно встретить:
- SyntaxError: invalid syntax
- SyntaxError: EOL while scanning string literal
- SyntaxError: unexpected EOF while parsing
Эта статья о том, как справиться с синтаксической ошибкой SyntaxError . Дочитайте её до конца и получите безотказный простой алгоритм действий, что поможет вам в трудную минуту — ваш спасательный круг.
Работать будем с программой, которая выводит на экран список учеников. Её код выглядит немного громоздко и, возможно, непривычно. Если не всё написанное вам понятно, то не отчаивайтесь, чтению статьи это не помешает.
Ожидается примерно такой результат в консоли:
Но запуск программы приводит к совсем другому результату. Скрипт сломан:
Ошибки в программе бывают разные и каждой нужен свой особый подход. Первым делом внимательно посмотрите на вывод программы в консоль. На последней строчке написано SyntaxError: invalid syntax . Если эти слова вам не знакомы, то обратитесь за переводом к Яндекс.Переводчику:
Первое слово SyntaxError Яндекс не понял. Помогите ему и разделите слова пробелом:
Теория. Синтаксические ошибки
Программирование — это не магия, а Python — не волшебный шар. Он не умеет предсказывать будущее, у него нет доступа к секретным знаниями, это просто автомат, это программа. Узнайте как она работает, как ищет ошибки в коде, и тогда легко найдете эффективный способ отладки. Вся необходимая теория собрана в этом разделе, дочитайте до конца.
SyntaxError — это синтаксическая ошибка. Она случается очень рано, еще до того, как Python запустит программу. Вот что делает компьютер, когда вы запускаете скрипт командой python script.py :
- запускает программу python
- python считывает текст из файла script.py
- python превращает текст программы в инструкции
- python исполняет инструкции
Синтаксическая ошибка SyntaxError возникает на четвёртом этапе в момент, когда Python разбирает текст программы на понятные ему компоненты. Сложные выражения в коде он разбирает на простейшие инструкции. Вот пример кода и инструкции для него:
- создать строку ‘Евгений’
- создать словарь
- в словарь добавить ключ ‘name’ со значением ‘Евгений’
- присвоить результат переменной person
SyntaxError случается когда Python не смог разбить сложный код на простые инструкции. Зная это, вы можете вручную разбить код на инструкции, чтобы затем проверить каждую из них по отдельности. Ошибка прячется в одной из инструкций.
1. Найдите поломанное выражение
Этот шаг сэкономит вам кучу сил. Найдите в программе сломанный участок кода. Его вам предстоит разобрать на отдельные инструкции. Посмотрите на вывод программы в консоль:
Вторая строчка сообщает: File "script.py", line 9 — ошибка в файле script.py на девятой строчке. Но эта строка является частью более сложного выражения, посмотрите на него целиком:
«Девман» — авторская методика обучения программированию. Готовим к работе крутых программистов на Python. Станьте программистом, пройдите продвинутый курс Python.
2. Разбейте выражение на инструкции
В прошлых шагах вы узнали что сломан этот фрагмент кода:
Разберите его на инструкции:
- создать строку ‘Имя ученика:
‘ - получить у строки метод format
- вызвать функцию с двумя аргументами
- результат присвоить переменной label
Так выделил бы инструкции программист, но вот Python сделать так не смог и сломался. Пора выяснить на какой инструкции нашла коса на камень.
Теперь ваша задача переписать код так, чтобы в каждой строке программы исполнялось не более одной инструкции из списка выше. Так вы сможете тестировать их по отдельности и облегчите себе задачу. Так выглядит отделение инструкции по созданию строки:
Сразу запустите код, проверьте что ошибка осталась на прежнему месте. Приступайте ко второй инструкции:
Строка format = template.format создает новую переменную format и кладёт в неё функцию. Да, да, это не ошибка! Python разрешает класть в переменные всё что угодно, в том числе и функции. Новая переменная переменная format теперь работает как обычная функция, и её можно вызвать: format(. ) .
Снова запустите код. Ошибка появится внутри format . Под сомнением остались две инструкции:
- вызвать функцию с двумя аргументами
- результат присвоить переменной label
Скорее всего, Python не распознал вызов функции. Проверьте это, избавьтесь от последней инструкции — от создания переменной label :
Запустите код. Ошибка снова там же — внутри format . Выходит, код вызова функции написан с ошибкой, Python не смог его превратить в инструкцию.
3. Проверьте синтаксис вызова функции
Теперь вы знаете что проблема в коде, вызывающем функцию. Можно помедитировать еще немного над кодом программы, пройтись по нему зорким взглядом еще разок в надежде на лучшее. А можно поискать в сети примеры кода для сравнения.
Запросите у Яндекса статьи по фразе “Python синтаксис функции”, а в них поищите код, похожий на вызов format и сравните. Вот одна из первых статей в поисковой выдаче:
Уверен, теперь вы нашли ошибку. Победа!
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Программа не работает. Что делать?
Моя программа не работает! Что делать? В данной статье я постараюсь собрать наиболее частые ошибки начинающих программировать на python 3, а также расскажу, как их исправлять.
Проблема: Моя программа не запускается. На доли секунды появляется чёрное окошко, а затем исчезает.
Причина: после окончания выполнения программы (после выполнения всего кода или при возникновении исключения программа закрывается. И если вы её вызвали двойным кликом по иконке (а вы, скорее всего, вызвали её именно так), то она закроется вместе с окошком, в котором находится вывод программы.
Решение: запускать программу через IDLE или через консоль.
Проблема: Не работает функция input. Пишет SyntaxError.
Пример кода:
Причина: Вы запустили Python 2.
Проблема: Где-то увидел простую программу, а она не работает.
Пример кода:
Причина: Вам подсунули программу на Python 2.
Решение: Прочитать об отличиях Python 2 от Python 3. Переписать её на Python 3. Например, данная программа на Python 3 будет выглядеть так:
Проблема: TypeError: Can’t convert ‘int’ object to str implicitly.
Пример кода:
Причина: Нельзя складывать строку с числом.
Решение: Привести строку к числу с помощью функции int(). Кстати, заметьте, что функция input() всегда возвращает строку!
Проблема: SyntaxError: invalid syntax.
Пример кода:
Причина: Забыто двоеточие.
Проблема: SyntaxError: invalid syntax.
Пример кода:
Причина: Забыто равно.
Проблема: NameError: name ‘a’ is not defined.
Пример кода:
Причина: Переменная «a» не существует. Возможно, вы опечатались в названии или забыли инициализировать её.
Решение: Исправить опечатку.
Проблема: IndentationError: expected an indented block.
Пример кода:
Причина: Нужен отступ.
Проблема: TabError: inconsistent use of tabs and spaces in indentation.
Пример кода:
Причина: Смешение пробелов и табуляции в отступах.
Решение: Исправить отступы.
Проблема: UnboundLocalError: local variable ‘a’ referenced before assignment.
Пример кода:
Причина: Попытка обратиться к локальной переменной, которая ещё не создана.
Проблема: Программа выполнилась, но в файл ничего не записалось / записалось не всё.
Пример кода:
Причина: Не закрыт файл, часть данных могла остаться в буфере.
Проблема: Здесь может быть ваша проблема. Комментарии чуть ниже 🙂