Использование переменных, которые еще не были определены или установлены (неявно или явно), часто является плохой вещью, поскольку это, как правило, указывает на то, что логика программы не обязательно была продумана полностью, и, вероятно, приведет к непредсказуемому поведению.
Если вам действительно нужно сделать это на Python, следующий трюк, похожий на ваш, гарантирует, что переменная имеет некоторое значение перед использованием:
try: myVar except NameError: myVar = None# or some other default value.
# Now you're free to use myVar without Python complaining.
Значение, которое вы решите ей присвоить, конечно, будет зависеть от того, что вы хотите сделать в таком случае. Например, если бы это было начальное значение для некоторого накопителя, вы бы установили его равным нулю.
Однако (и это мое мнение), вероятно, было бы лучше провести рефакторинг вашего кода, чтобы такой ситуации не возникало.
В качестве примера, в следующем коде был дан комментарий к этому ответу, чтобы разрешить проведение линии от предыдущей точки к текущей:
if last: draw(last, current); last = current
В случае, когда last не было привязано к значению, это вообще не поможет в Python, поскольку даже проверкаlast вызовет исключение. Лучшей идеей было бы убедиться, что у lastесть значение, которое можно использовать, чтобы решить, является ли оно допустимым. Это было бы что-то вроде:
last = None
# some time passes ...
if last isnotNone: draw(last, current); last = current
Это гарантирует, что переменная существует и что вы используете ее только в том случае, если она действительна для того, для чего она вам нужна.
Вы все еще можете добавить код для принудительного выполнения этого (если у вас нет контроля над начальной настройкой переменной), используя метод исключения, приведенный выше:
# Variable 'last' may or may not be bound to a value at this point.
try: last except NameError: last = None
# It will always now be bound to a value at this point.
if last isnotNone: draw(last, current); last = current
Ответ 3
Простой способ - сначала инициализировать ее, сказав myVar = None
Тогда позже:
if myVar isnotNone: # Do something
Ответ 4
Использование try / except - лучший способ проверить существование переменной. Но почти наверняка есть лучший способ сделать то, что вы делаете, чем установка / тестирование глобальных переменных.
Например, если вы хотите инициализировать переменную уровня модуля при первом вызове какой-либо функции, вам лучше использовать код, подобный этому:
my_variable = None
defInitMyVariable(): global my_variable if my_variable isNone: my_variable = ...