Ошибка выполнения Python, что это такое

Обновлено: 02.07.2024

Я сделал игру на Python 2.6. Я также превратил его в исполняемый файл с помощью cx_Freeze 4.3. Когда я запускаю исполняемый файл на своем компьютере, я получаю следующее:

Я не понимаю, что здесь произошло. Я пытался решить проблему, но безуспешно. Затем я искал ошибку времени выполнения в Google, и он сказал, что это может быть совместимость. Я написал оригинальный скрипт на Windows Vista со скачанной версией Windows 7 Python 2.6. Я сделал это, потому что в Windows Vista не было интернета, поэтому я загрузил файлы python, pygame и cx_freeze .msi на свой ноутбук с Windows 7. Затем я перенес файлы на рабочий стол Windows Vista. Это проблема? Или может сценарий? Я не думаю, что это сценарий, так как я могу играть в игру, когда это все еще скрипт Python. Хотя он немного длинный. Я использую Windows 7 с python 2.6, pygame 2.6 и cx_freeze 4.3. Спасибо, если вы можете мне помочь :).

Поиск pygame cx_freeze вызывает много предыдущих вопросов. Вы их уже проходили?

Используйте поле поиска (см. верхний правый угол на странице) для поиска среды выполнения cx_Freeze, и вы получите ссылку на вопрос Распределение Pygame — Ошибка выполнения — возможно, с ответом на вашу проблему

2 ответа 2

Ошибка времени выполнения – это тип ошибки, которая намеренно возникает во время выполнения программы (отсюда и название). Например, в python ошибка выполнения может возникнуть только тогда, когда кто-то пишет

Это предназначено для остановки программы в случае возникновения ошибки, которую интерпретатор программы не обнаружил, но которая может привести к тому, что программа не будет функционировать должным образом. Примером того, когда требуется ошибка времени выполнения, является эта функция (оболочка для функции termcolor cprint, которая принимает число в качестве аргумента цвета):

В этом случае функция не будет работать должным образом или сообщит пользователю о какой-либо ошибке, если аргумент цвета не равен 1 или 2. Чтобы решить эту проблему и упростить использование вашей программы, используйте среду выполнения. ошибка (или более крупные библиотеки создадут свои собственные исключения, это не важно). По сути, поскольку аргумент, отличный от 1 или 2, на самом деле является ошибкой в ​​вашей программе (этот python не поймает и не поднимет для вас), он вызовет ошибку для диагностики пользователем. Вот новая и улучшенная версия функции:

Теперь, если пользователь совершит ошибку, программа уловит это как ошибку, а не перестанет работать или сделает что-то неожиданное, что затруднит диагностику (и в некоторых случаях потенциально уязвимо). Вот почему ошибка времени выполнения полезна.

Поскольку вы программируете все больше и больше, вы, естественно, столкнетесь с большим количеством ошибок (или ошибок). Выявление, понимание и исправление ошибок — важная часть программирования. Python сделает все возможное, чтобы запустить все, что вы ему скажете, но если он не может понять, что вы просите, он не запустит программу. Тем не менее, Python попытается сообщить вам немного информации о том, что пошло не так, чтобы помочь вам попытаться это исправить.

Вот две ошибки Python.

В этом первом примере мы забыли использовать круглые скобки, необходимые для print(. ) . Python не понимает, что вы пытаетесь сделать.

Вот второй пример ошибки в Python.

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

Синтаксическая ошибка возникает, когда Python не может понять, что вы говорите. Ошибка во время выполнения возникает, когда Python понимает, что вы говорите, но сталкивается с проблемами при следовании вашим инструкциям.

В английском языке синтаксическая ошибка будет похожа на предложение

Пожалуйста, кошка, собака, обезьяна.

Грамматика этого предложения не имеет смысла. С точки зрения английской грамматики отсутствует глагол (действие). Вы не можете понять, что вас просят сделать. Синтаксис означает то же самое, что и грамматика.

В английском языке ошибка времени выполнения будет похожа на предложение

Пожалуйста, съешьте пианино.

Предложение имеет смысл с грамматической точки зрения — глагол и существительное стоят в нужном месте — так что вы знаете, что вас просят сделать. Но вы столкнетесь с проблемами, как только начнете пытаться съесть пианино (за исключением, может быть, если вы термит). Это называется ошибкой времени выполнения, поскольку возникает после запуска программы.

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

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

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

Распространенные синтаксические ошибки в Python

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

Python сообщает SyntaxError: недопустимый синтаксис и указывает знаком ^ на восклицательный знак. Проблема в том, что ! не имеет значения в Python. Синтаксическая ошибка исчезла бы, если бы вместо этого мы поместили print("Hello, World!"), потому что тогда Python понял бы, что ! является частью текста с Hello, World .

Вот еще одна синтаксическая ошибка, более тонкая.

Проблема в том, что класс — это особое слово в Python. если бы вы написали курс вместо класса, это было бы хорошо. Нажмите здесь, чтобы увидеть список всех специальных «ключевых слов» в Python.

Если вы заключаете текст в кавычки и забываете о втором, или используете круглые скобки и забываете о втором, вы получите синтаксические ошибки:

В этой ошибке EOL является сокращением от End Of Line: Python ожидал другого ", но строка закончилась до того, как была найдена.

Точно так же EOF является сокращением от End Of File: Python продолжал искать ), но программный файл закончился до того, как был найден.

Иногда две очень похожие синтаксические ошибки могут привести к появлению двух совершенно разных сообщений об ошибках. Но каждое сообщение об ошибке действительно пытается сообщить вам что-то полезное.

Ошибки выполнения

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

  • использование неопределенной переменной или функции. Это также может произойти, если вы непоследовательно используете заглавные буквы в имени переменной:
  • деление на ноль, что не имеет смысла в математике. (Почему? Поскольку любое число, умноженное на 0, равно 0, решение 1 = X * 0 не существует, поэтому 1/0 не определено.)
  • использование операторов для неверного типа данных

По мере изучения Python вы обнаружите больше способов возникновения ошибок.

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

Логические ошибки

Ваша программа может работать без сбоев (без синтаксических ошибок или ошибок времени выполнения), но при этом выполнять неправильные действия. Например, вы хотите, чтобы программа вычисляла среднее двух чисел: среднее значение x и y определяется как

Почему эта программа не работает?

Среднее значение должно быть

но программа вместо этого печатает 5.0! На этот раз ошибка связана с «порядком операций» в арифметике. Когда вы пишете x + y/2, это имеет тот же математический смысл, что и . Чтобы решить эту проблему, третья строка нашей программы должна быть записана как среднее = (x + y) / 2 , что дает понять Python, что нам действительно нужно значение , где мы сначала складываем, а потом делим.

У вас могут быть логические ошибки из-за того, что вы спроектировали программу неправильно или из-за того, что вы написали код, который не соответствует дизайну (как в среднем примере). Логические ошибки может быть трудно обнаружить, особенно в более длинной программе, но по мере того, как вы будете лучше писать код, вы также научитесь избегать логических ошибок. Урок 6D даст несколько советов, как избежать логических ошибок.

Упражнения

Теперь, когда урок завершен, у нас есть три упражнения по отладке (исправлению ошибок в программах). Вы можете попытаться определить ошибки перед запуском программ, или вы можете сначала запустить их и использовать ответ Python, чтобы определить, что нужно исправить.

Как только вы устраните все ошибки, переходите к следующему уроку!


2010–2022 гг. Computer Science Circles — это бесплатная услуга Образовательного центра математики и вычислительной техники Университета Ватерлоо.
Общее количество упражнений, выполненных всеми пользователями: 2882670

ЦЭМС | Университет Ватерлоо, MC 5104 | 200 Юниверсити-авеню Вест | Ватерлоо, Онтарио, Канада N2L 3G1 | Телефон: 519 888 4808 | свяжитесь с нами

Список всех ключевых слов в Python 3: False, None, True и as, assert, break, class, continue, def, del, elif, else, кроме, наконец, for, from, global, if , импортировать, в, есть, лямбда, нелокальный, не, или, передать, поднять, вернуть, попробовать, пока, с, выход

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

Как исправить ошибку времени выполнения Python

Для решения различных проблем с ПК мы рекомендуем DriverFix:
Это программное обеспечение будет поддерживать ваши драйверы в рабочем состоянии, тем самым защищая вас от распространенных компьютерных ошибок и сбоев оборудования. Проверьте все свои драйверы прямо сейчас, выполнив 3 простых шага:

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

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

Ошибка во время выполнения возникает, когда Python понимает, что вы говорите, но сталкивается с проблемами при следовании вашим инструкциям.

Как исправить ошибку времени выполнения Python?

Итак, вы все написали правильно, другими словами, ваш синтаксис правильный, но Python все еще не понимает, что вы говорите. Давайте рассмотрим простой пример ошибки времени выполнения Python:

Если вы попытаетесь запустить эту простую строку, вы получите ошибку времени выполнения просто потому, что не определили переменную solution. Строка не имеет смысла.

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

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

Но когда вы пытаетесь понять предложение, когда вы собираете слова, это не имеет смысла, потому что вы знаете, что можете открыть и закрыть дверь, даже закрыть ее или вынуть, но съесть?

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

1. Использовать неопределенную переменную или функцию.

Это также может произойти, если вы непоследовательно используете заглавные буквы в имени переменной:

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

2. Деление на ноль

Угадайте, что? Python заботится о математике, а в математике деление на ноль не имеет смысла.

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

3. Используйте операторы для неверного типа данных

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

Также необходимо знать, что Python запускает программу в два этапа. Сначала он проверяет синтаксис и, если синтаксис правильный, переходит ко второму шагу выполнения программы. Именно здесь он натыкается на возможные ошибки времени выполнения.

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

idee restoro

По-прежнему возникают проблемы? Исправьте их с помощью этого инструмента:

До сих пор сообщения об ошибках были только упомянуты, но если вы пробовали примеры, вы, вероятно, видели некоторые из них. Существует (как минимум) два различных типа ошибок: синтаксические ошибки и исключения.

8.1. Синтаксические ошибки¶

Синтаксические ошибки, также известные как ошибки синтаксического анализа, являются, пожалуй, наиболее частым видом жалоб, которые вы получаете, пока изучаете Python:

Синтаксический анализатор повторяет ошибочную строку и отображает небольшую «стрелку», указывающую на самую раннюю точку в строке, где была обнаружена ошибка. Ошибка вызвана (или, по крайней мере, обнаружена) токеном, предшествующим стрелке: в примере ошибка обнаружена в функции print() , поскольку отсутствует двоеточие ( ':' ) перед этим. Имя файла и номер строки печатаются, чтобы вы знали, где искать, если ввод поступил из скрипта.

8.2. Исключения¶

Последняя строка сообщения об ошибке указывает, что произошло. Исключения бывают разных типов, и тип печатается как часть сообщения: типы в примере — ZeroDivisionError, NameError и TypeError. Строка, напечатанная как тип исключения, является именем возникшего встроенного исключения. Это верно для всех встроенных исключений, но не обязательно для пользовательских исключений (хотя это полезное соглашение). Стандартные имена исключений являются встроенными идентификаторами (а не зарезервированными ключевыми словами).

Остальная часть строки содержит подробные сведения о типе исключения и его причине.

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

В разделе "Встроенные исключения" перечислены встроенные исключения и их значения.

8.3. Обработка исключений¶

Можно написать программы, обрабатывающие выбранные исключения. Посмотрите на следующий пример, который запрашивает у пользователя ввод до тех пор, пока не будет введено допустимое целое число, но позволяет пользователю прервать программу (используя Control - C или что-то еще, что поддерживает операционная система); обратите внимание, что пользовательское прерывание сигнализируется возбуждением исключения KeyboardInterrupt.

Инструкция try работает следующим образом.

Сначала выполняется предложение try (операторы между ключевыми словами try и exclude).

Если исключения не возникает, за исключением предложения пропускается и выполнение оператора try завершается.

Если во время выполнения предложения try возникает исключение, остальная часть предложения пропускается. Затем, если его тип соответствует исключению, названному в честь ключевого слова exclude, выполняется предложение exclude, а затем выполнение продолжается после блока try/except.

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

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

Класс в предложении исключения совместим с исключением, если это тот же класс или его базовый класс (но не наоборот — предложение исключения, перечисляющее производный класс, несовместимо с базовым классом). Например, следующий код напечатает B, C, D в таком порядке:

Обратите внимание, что если бы исключающие предложения были перевернуты (с первым исключением B), то были бы напечатаны B, B, B — срабатывает первое соответствующее предложение exclude.

Все исключения наследуются от BaseException , поэтому его можно использовать в качестве подстановочного знака. Используйте это с особой осторожностью, так как таким образом легко замаскировать настоящую ошибку программирования! Его также можно использовать для вывода сообщения об ошибке, а затем повторного вызова исключения (что позволяет вызывающей стороне также обрабатывать исключение):

Кроме того, последнее предложение exclude может не указывать имена исключений, однако тогда значение исключения должно быть получено из sys.exc_info()[1] .

У оператора try … кроме необязательного предложения else, которое, если оно присутствует, должно следовать за всеми предложениями кроме. Это полезно для кода, который должен выполняться, если предложение try не вызывает исключения. Например:

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

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

В предложении except после имени исключения может быть указана переменная. Переменная привязана к экземпляру исключения с аргументами, хранящимися в instance.args. Для удобства экземпляр исключения определяет __str__(), чтобы аргументы можно было распечатать напрямую, без ссылки на .args. Можно также сначала создать экземпляр исключения, прежде чем вызывать его, и добавить к нему любые атрибуты по желанию.

Если у исключения есть аргументы, они печатаются как последняя часть («подробности») сообщения для необработанных исключений.

Обработчики исключений обрабатывают исключения не только в том случае, если они возникают непосредственно в предложении try, но также и в тех случаях, когда они возникают внутри функций, которые вызываются (даже косвенно) в предложении try. Например:

8.4. Вызов исключений¶

Инструкция повышения позволяет программисту принудительно вызвать указанное исключение. Например:

Единственный аргумент для повышения указывает на возбуждаемое исключение. Это должен быть либо экземпляр исключения, либо класс исключения (класс, производный от Exception ). Если передается класс исключения, он будет неявно создан путем вызова его конструктора без аргументов:

Если вам нужно определить, было ли возбуждено исключение, но вы не собираетесь его обрабатывать, более простая форма оператора повышения позволяет повторно инициировать исключение:

8.5. Цепочка исключений¶

Инструкция повышения допускает необязательный параметр from, который включает цепочку исключений. Например:

Это может быть полезно при преобразовании исключений. Например:

Цепочка исключений происходит автоматически, когда исключение вызывается внутри раздела exclude или finally.Это можно отключить, используя идиому from None:

Дополнительную информацию о механизме объединения см. в разделе Встроенные исключения .

8.6. Пользовательские исключения¶

Программы могут называть свои собственные исключения, создавая новый класс исключений (дополнительную информацию о классах Python см. в разделе Классы). Исключения обычно должны быть производными от класса Exception прямо или косвенно.

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

Большинство исключений определяются с именами, оканчивающимися на "Ошибка", аналогично именам стандартных исключений.

Многие стандартные модули определяют свои собственные исключения для сообщения об ошибках, которые могут возникнуть в определяемых ими функциях. Более подробная информация о классах представлена ​​в главе Классы.

8.7. Определение действий по очистке¶

У оператора try есть еще одно необязательное предложение, предназначенное для определения действий по очистке, которые должны выполняться при любых обстоятельствах. Например:

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

Если во время выполнения предложения try возникает исключение, это исключение может быть обработано предложением exclude. Если исключение не обрабатывается предложением exclude, исключение возникает повторно после выполнения предложения finally.

Исключение может возникнуть во время выполнения предложения exclude или else. Опять же, исключение повторно вызывается после того, как предложение finally было выполнено.

Если в предложении finally выполняется оператор break , continue или return, исключения не вызываются повторно.

Если оператор try достигает оператора break , continue или return, предложение finally будет выполняться непосредственно перед выполнением оператора break , continue или return.

Если предложение finally включает оператор return, возвращаемое значение будет значением из оператора return предложения finally, а не значением из оператора return предложения try.

Более сложный пример:

Как видите, предложение finally выполняется при любом событии. Ошибка TypeError, вызванная разделением двух строк, не обрабатывается предложением exclude и, следовательно, возникает повторно после выполнения предложения finally.

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

8.8. Предопределенные действия по очистке¶

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

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

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

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

1) Забыл поставить : в конце операторов if, elif, else, for, while, class или def. (Вызывает « SyntaxError: недопустимый синтаксис »)

Эта ошибка возникает с таким кодом:

2) Использование = вместо == . (Вызывает « SyntaxError: недопустимый синтаксис »)

= – это оператор присваивания, а == – оператор сравнения "равно". Эта ошибка возникает с таким кодом:

3) Использование неправильного отступа. (Вызывает «IndentationError: неожиданный отступ» и «IndentationError: отсутствие отступа не соответствует ни одному внешнему уровню отступа» и «IndentationError: ожидается блок с отступом»)

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

4) Забыть вызов len() в операторе цикла for. (Вызывает « TypeError: объект 'list' не может быть интерпретирован как целое число »)

Обычно требуется выполнить итерацию по индексам элементов в списке или строке, что требует вызова функции range().Только не забудьте передать возвращаемое значение len(someList) , а не просто someList .

Эта ошибка возникает с таким кодом:

(Обновление: как уже отмечали некоторые, вам может понадобиться только i в спаме: а не приведенный выше код. Но вышеприведенное предназначено для очень законного случая, когда вам нужен индекс в теле цикла , а не только само значение.)

5) Попытка изменить строковое значение. (Вызывает «Ошибка типа: объект 'str' не поддерживает назначение элементов»)

Строки — это неизменяемый тип данных. Эта ошибка возникает с таким кодом:

Возможно, вам нужно следующее:

6) Попытка объединить нестроковое значение со строковым значением. (Вызывает «Ошибка типа: невозможно неявно преобразовать объект 'int' в str»)

Эта ошибка возникает с таким кодом:

Что вы хотите сделать, так это:

7) Забыть кавычку в начале или в конце строкового значения. (Вызывает « SyntaxError: EOL при сканировании строкового литерала »)

Эта ошибка возникает с таким кодом:

8) Опечатка в имени переменной или функции. (Вызывает «NameError: имя ‘fooba’ не определено»)

Эта ошибка возникает с таким кодом:

9) Опечатка в имени метода. (Вызывает «AttributeError: у объекта 'str' нет атрибута 'lowerr'»)

Эта ошибка возникает с таким кодом:

10) Переход за последний индекс списка. (Вызывает « IndexError: индекс списка вне допустимого диапазона »)

Эта ошибка возникает с таким кодом:

11) Использование несуществующего словарного ключа. (Вызывает « KeyError: 'спам' »)

Эта ошибка возникает с таким кодом:

12) Попытка использовать ключевое слово Python для имени переменной. (Вызывает « SyntaxError: недопустимый синтаксис »)

Ключевые слова Python (также называемые зарезервированными словами) нельзя использовать для имен переменных. Это происходит с таким кодом, как:

13) Использование расширенного оператора присваивания для новой переменной. (Вызывает «NameError: имя ‘foobar’ не определено»)

Не думайте, что переменные начинаются со значения, например 0 или пустой строки. Оператор с расширенным оператором типа spam += 1 эквивалентен spam = spam + 1 . Это означает, что для начала в спаме должна быть ценность.

Эта ошибка возникает с таким кодом:

14) Использование локальной переменной (с тем же именем, что и у глобальной переменной) в функции перед назначением локальной переменной. (Вызывает «UnboundLocalError: ссылка на локальную переменную 'foobar' перед назначением»)

Использовать локальную переменную в функции с таким же именем, как и у глобальной переменной, непросто. Правило таково: если переменной в функции когда-либо что-то присваивается, это всегда локальная переменная, когда она используется внутри этой функции. В противном случае это глобальная переменная внутри этой функции.

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

Эта ошибка возникает с таким кодом:

15) Попытка использовать range() для создания списка целых чисел. (Вызывает «Ошибка типа: объект 'range' не поддерживает присваивание элементов»)

Иногда вам нужен список целочисленных значений по порядку, поэтому range() кажется хорошим способом создать этот список. Однако вы должны помнить, что range() возвращает «объект диапазона», а не фактическое значение списка.

Эта ошибка возникает с таким кодом:

Что вы, вероятно, хотите сделать, так это:

(Обновление: это работает в Python 2, потому что range() Python 2 возвращает значение списка. Однако попытка сделать это в Python 3 приведет к указанной выше ошибке.)

16) Нет оператора инкремента ++ или -- декремента. (Вызывает « SyntaxError: недопустимый синтаксис »)

Если вы работаете с другим языком программирования, таким как C++, Java или PHP, вы можете попробовать увеличить или уменьшить значение переменной с помощью ++ или -- . В Python таких операторов нет.

Эта ошибка возникает с таким кодом:

Что вы хотите сделать, так это:

17) Обновление: Как отмечает Лучано в комментариях, также часто забывают добавить self в качестве первого параметра для метода. (Вызывает «Ошибка типа: myMethod() не принимает аргументов (дан 1)»)

Эта ошибка возникает с таким кодом:

Краткое объяснение различных сообщений об ошибках приведено в Приложении D книги "Изобретайте с помощью Python".

Учитесь программировать с помощью моих книг для начинающих, бесплатных по лицензии Creative Commons:

Пройдите мой онлайн-курс Udemy «Автоматизация скучных вещей с помощью Python». Используйте эту ссылку, чтобы применить скидку 60%.

Читайте также: