Почему Python не обнаруживает ошибки перед выполнением?

Предположим, у меня есть следующий код в Python:

a = "WelcomeToTheMachine" if a == "DarkSideOfTheMoon": awersdfvsdvdcvd print "done!" 

Почему эта ошибка не возникает? Как он компилируется? В Java или C # это будет замечено во время компиляции.

  • Глобальная обработка исключений в Google App Engine
  • Как удалить все пустые строки в файле с помощью python?
  • Выполнение исполняемого скрипта Python
  • Почему Python компилирует модули, но не запускает скрипт?
  • Код для Greatest Common Divisor в Python
  • Всегда ли быстрее использовать строку в качестве ключа в dict?
  • Как удалить все отдельные слова длиной 16 букв или более с помощью python
  • Обновить объект движка приложения
  • 3 Solutions collect form web for “Почему Python не обнаруживает ошибки перед выполнением?”

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

    Python – это интерпретируемый язык байтового кода. Технически исходный код «компилируется» в байтовый код, но тогда байт-код как раз вовремя (JIT) скомпилирован при использовании PyPy или Pyston, иначе он интерпретируется по строкам.

    Рабочий процесс выглядит следующим образом:

    Ваш код Python -> Компилятор -> .pyc файл -> Интерпретатор -> Ваш выход

    Использование стандартного времени выполнения python Что все это значит? По сути, вся тяжелая работа происходит во время выполнения, в отличие от C или C ++, где исходный код целиком анализируется и переводится в двоичный файл во время компиляции.

    Во время «компиляции» python почти полностью проверяет ваш синтаксис. Поскольку awersdfvsdvdcvd является допустимым идентификатором, ошибка не возникает до тех пор, пока эта строка не будет выполнена. Просто потому, что вы используете имя, которое не было определено, не означает, что оно не может быть определено в другом месте … например:

     globals()['awersdfvsdvdcvd'] = 1 

    ранее в файле было бы достаточно, чтобы подавить NameError , который произошел бы, если бы была NameError строка с ошибочным именем.

    Итак, не может ли python просто искать выражения глобалов? Ответ на это снова «нет». Из модуля «foo» я могу добавить к глобалам модуля «бар» аналогичным образом. И python не знает, какие модули будут импортированы или будут импортированы до тех пор, пока он не будет запущен (я могу динамически импортировать модули во время выполнения).


    Обратите внимание, что большинство причин, о которых я упоминаю, почему Python как язык не может дать вам предупреждение об этих вещах, связаны с тем, что люди делают сумасшедшие вещи. Есть ряд инструментов, которые будут предупреждать вас об этих вещах (полагая, что вы не собираетесь делать такие глупые вещи). Моим любимым является pylint , но практически любой pylint python должен быть в состоянии предупредить вас о неопределенных переменных. Если вы зацепите linter до вашего редактора, большую часть времени вы можете поймать эти ошибки до того, как вы действительно запустите код.

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

    Interesting Posts

    Выполнение преобразования ширины штриха (SWT) (Python)

    Создание pdf-латекса с помощью скрипта python

    Оптимизация SciPy сгруппированными границами

    Python: список различных пустых множеств

    Разработка графического интерфейса с IronPython и Visual Studio 2010

    Запуск интерактивного Bash с помощью popen и выделенного TTY Python

    Перезапуск Python Interpreter

    Python: создать dict из списка и auto-gen / привить ключи (список – это фактические значения клавиш)?

    Как найти желтую координату окна изображения?

    Преобразование std :: vector в массив NumPy без копирования данных

    Сбросить временную часть временной отметки панды

    Словари слияния Python с пользовательской функцией слияния

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

    Вставить команду, используя Selenium

    Django – наличие промежуточного программного обеспечения для связи с представлениями / шаблонами

    Python - лучший язык программирования в мире.