Pylint не обнаруживает неопределенную переменную в предложении else

У меня есть следующий код Python

a = 2
if a == 1:
    b = 'blah'
    print b
else:
    print b

Когда я пытаюсь запустить его, я получаю ошибку времени выполнения, поскольку «b» определено только в предложении «if», а не «else».

Pylint и Pyflakes не смогли обнаружить эту проблему.

Есть ли другой способ обнаружить это без запуска кода?


person freakazoid    schedule 08.03.2016    source источник
comment
я почти уверен, что pycharm линяет мне такие вещи... может быть, нет... я проверю позже   -  person Joran Beasley    schedule 08.03.2016
comment
Pycharm действительно смог это обнаружить, но я пытаюсь добавить линтер в автоматизированный процесс сборки, поэтому не знаю, смогу ли его использовать.   -  person freakazoid    schedule 08.03.2016
comment
попробовать pychecker может быть? Я думаю, это то, как это называется   -  person Joran Beasley    schedule 08.03.2016


Ответы (1)


Я не думаю, что это можно обнаружить без запуска кода, потому что в целом может быть более сложная логика, чем в вашем примере. Как насчет цикла, который повторяет это предложение if-else несколько раз, и по какой-то причине вы уверены, что в первый раз обязательно будет назначено b? Средство проверки должно быть точно таким же сложным, как и интерпретатор (и выполнять аналогичные операции, возможно, включая побочные эффекты), чтобы знать обо всех возможных состояниях выполнения программы. См. понятие статической проверки кода.

person Thomas Lotze    schedule 08.03.2016
comment
Анализ потока управления в дорожной карте для astroid (библиотека для pylint). Хотя он, конечно, не обнаружит сложный случай, как вы описываете, в будущем он сможет анализировать более простые случаи, в которых он может сделать вывод о результате условия (например, в примере @freakazoid). - person The Compiler; 09.03.2016