@bigburn
Делаю неживое живым

Как найти необъявленные переменные в коде, не выполняя его?

есть файл х.py с кодом, например
a
b = 1
class C(D): pass
import e

Здесь мы можем видеть, что на переменные `a` и `D` программа будет ругаться (NameError, name 'a' not defined), т.к они не определены.

Как можно найти такие необъявленные переменные, не исполняя код?
Смотрю в сторону AST, возможно решение может быть где-то там.
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Taus
Ответ на этот вопрос неоднозначен, потому что Python динамический язык. В общем случае код может производить практически любые действия от простого изменения globals() (например _ из стандартной gettext) до замены следующего кода на другой (например автоматический импорт модулей в библиотеке ipython-autoimport). Поэтому без выполнения кода не получится определить будет ли исключение NameError или нет.

Если вы не используете подобные идиомы в разработке, то помогут любые линтеры (например pyflakes, flake8, pylint), которые выведут отчёт по многим логическим/синтаксическим ошибкам в коде, включая неопределённые переменные. Если требуется программно определять, то возможно достаточно будет pyflakes.
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Если для разработчика то берем PyCharm и в бой. Если автоматизация с проверкой кода то SonarQube, например
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы