Из-за динамического связывания.Python - это динамический язык, позволяющий делать практически все с помощью переменных.Вы даже можете получить доступ к globals-dict и ввести новые переменные, состоящие из значений времени выполнения.
Таким образом, среда IDE не может быть уверена, когда и какие переменные существуют.Смотрите этот пример:
#silly.py
import sys
if len(sys.argv) > 1:
thisNowExists = True
#1
try:
if thisNowExists:
print("this existed before")
except NameError:
print("this _now_ exists")
thisNowExists = True
Ни один человек или IDE не может знать, определен ли thisNowExists
в позиции #1
, поэтому, если вы хотите переименовать тупо названное thisNowExists
ниже этой точки, этоне определено, если мы должны переименовать внешний вид и до #1
.
Вам нужно было бы выполнить расширенный анализ потока управления, чтобы сделать правильное предположение, что thisNowExists
определено ниже оператора try / catch, но из-задинамическая загрузка скрипта (thisNowExists = 1; import silly
) и сортировка, он может даже существовать до import sys
без аргументов.
именование переменных по-разному и поиск / замена - ваш лучший вариант;)