Python строит нормально даже с опечатками в коде?

78
9

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


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


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


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


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


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


def foo(self):
pass

def bar(self):
foe()


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


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


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

спросил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
1
Решение
126

Фактически PyLint обнаружит это, поэтому, если вы используете Eclipse с PyDev plug- in, он помечает строку с foe() как ошибку.


PyDev теперь может найти:

    Undefined переменные Undefined переменная из импорта Неиспользуемые переменные Неиспользуемые импорты Неиспользованный импорт диких животных Дублированные подписи Импортное переопределение Неразрешенный импорт Нет 'self' токена, объявленного в методе класса Смешивание отступов с вкладками и пробелами Плохой отступ (неправильное количество пробелов при отступе).

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

ответил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
78

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


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

ответил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
77

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

ответил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
46

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

ответил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
45

Python не компилируется до запуска программы. Так что трудно говорить о "compile- времени".

ответил(а) 2021-01-19T18:52:54+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема