Вопрос-Ответ

How do I check if a variable exists?

Как мне проверить, существует ли переменная?

Я хочу проверить, существует ли переменная. Сейчас я делаю что-то вроде этого:

try:
myVar
except NameError:
# Do something.

Существуют ли другие способы без исключений?

Переведено автоматически
Ответ 1

Чтобы проверить существование локальной переменной:

if 'myVar' in locals():
# myVar exists.

Чтобы проверить существование глобальной переменной:

if 'myVar' in globals():
# myVar exists.

Чтобы проверить, есть ли у объекта атрибут:

if hasattr(obj, 'attr_name'):
# obj.attr_name exists.
Ответ 2

Использование переменных, которые еще не были определены или установлены (неявно или явно), часто является плохой вещью, поскольку это, как правило, указывает на то, что логика программы не обязательно была продумана полностью, и, вероятно, приведет к непредсказуемому поведению.

Если вам действительно нужно сделать это на 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 is not None:
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 is not None:
draw(last, current);
last = current
Ответ 3

Простой способ - сначала инициализировать ее, сказав myVar = None

Тогда позже:

if myVar is not None:
# Do something
Ответ 4

Использование try / except - лучший способ проверить существование переменной. Но почти наверняка есть лучший способ сделать то, что вы делаете, чем установка / тестирование глобальных переменных.

Например, если вы хотите инициализировать переменную уровня модуля при первом вызове какой-либо функции, вам лучше использовать код, подобный этому:

my_variable = None

def InitMyVariable():
global my_variable
if my_variable is None:
my_variable = ...
2024-01-01 23:23 python