Python строит нормально, даже с опечатками в коде? - PullRequest
0 голосов
/ 26 мая 2011

(примечание: я новичок в Python)

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

Это нормально ?!Разве сборка не провалилась ?!Я правильно настроен?!

Я использую Eclipse в Linux Centos.

Eclipse обнаруживает другие ошибки (отступы, неопределенные переменные (например, если foo :, с foo, никогда не объявленным ранее, вызываетошибка сборки и т. д.)

вот как выглядит мой материал:

def foo(self):
   pass

def bar(self):
   foe() 

-> foe вместо foo -> НЕ генерирует ошибку компиляции, но (конечно) падает во время выполнения

Я могу понять, что Python иногда не знает типы переменных до времени выполнения, но не может его обнаружить, когда я выполняю вызов функции, которая недаже существуют в классе ?? !!

Я надеюсь, что с моей настройкой все в порядке, иначе я боюсь, что пропущу Java, C и все остальные мои статически типизированные языки;))))

Ответы [ 5 ]

7 голосов
/ 26 мая 2011

На самом деле PyLint обнаружит это, поэтому, если вы используете Eclipse с PyDev , он пометит строку как foe() как ошибку ,

В настоящее время PyDev может найти :

  • неопределенные переменные
  • неопределенная переменная из импорта
  • Неиспользуемые переменные
  • Неиспользованный импорт
  • Неиспользованный дикий импорт
  • Дублированные подписи
  • Переопределение импорта
  • Неразрешенный импорт
  • В методе класса не объявлен токен «self»
  • Смешивание отступов с табуляцией и пробелами
  • Неверный отступ (неверное количество пробелов при отступе).

Screenshot of the OP's code parsed by PyLint in PyDev

2 голосов
/ 26 мая 2011

Python не "построен" так же, как Си.Функции могут быть созданы на лету в Python.Думайте о def foo(): как о добавлении записи foo в таблицу функций.Когда вы вызываете функцию, Python ищет имя этой функции в таблице.Если его там нет, вы получаете ошибку во время выполнения.Это по замыслу.Вы по-прежнему будете получать сообщения об ошибках, хотя они будут появляться при фактическом вызове неизвестной функции.

2 голосов
/ 26 мая 2011

Нет, он не может это обнаружить.

Он динамический и интерпретируемый.На самом деле вы могли бы добавлять функции к классам во время выполнения или импортировать модули, чтобы он не мог легко определить, существует функция или нет.

0 голосов
/ 26 мая 2011

Вы должны использовать сторонний инструмент для проверки так называемых ошибок компиляции. Посмотрите на этот вопрос (и ответы) и PyChecker или PyLint .

0 голосов
/ 26 мая 2011

Python не компилируется, пока вы не запустите программу.Поэтому трудно говорить о «времени компиляции».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...