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

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

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

# Now you're free to use myVar without Python complaining.

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

Ответ 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 = ...

Ответ 5

для объектов/модулей, вы также можете

'var' in dir(obj)

Например,

>>> class Something(object):
...     pass
...
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
True
>>> 'b' in dir(c)
False

Ответ 6

Я предполагаю, что тест будет использоваться в функции, аналогичной user97370 answer. Мне не нравится этот ответ, потому что он загрязняет глобальное пространство имен. Один из способов исправить это - вместо этого использовать класс:

class InitMyVariable(object):
  my_variable = None

def __call__(self):
  if self.my_variable is None:
   self.my_variable = ...

Мне это не нравится, потому что это усложняет код и открывает такие вопросы, как, если это подтвердит шаблон программирования Singleton? К счастью, Python позволил функциям иметь атрибуты на некоторое время, что дает нам это простое решение:

def InitMyVariable():
  if InitMyVariable.my_variable is None:
    InitMyVariable.my_variable = ...
InitMyVariable.my_variable = None

Ответ 7

catch вызывается except в Python. кроме того, что это хорошо для таких простых случаев. Там AttributeError который можно использовать, чтобы проверить, имеет ли объект атрибут.

Ответ 8

Способ, который часто хорошо подходит для работы с подобной ситуацией, заключается не в том, чтобы явно не проверять, существует ли переменная, а просто продолжить и перенести первое использование несуществующей переменной в try/except NameError:

# Search for entry.
for x in y:
  if x == 3:
    found = x

# Work with found entry.
try:
  print('Found: {0}'.format(found))
except NameError:
  print('Not found')
else:
  # Handle rest of Found case here
  ...

Ответ 9

Это просто дополнение к предыдущим ответам, чтобы проверить, присутствует ли ключ в JSON/Dict или нет в python

'Имя объекта Json/Dict'.has_key (' имя ключа ')

это вернет True или False

Ответ 10

попробовать: `

Myvariable = ['v', 'a', 'r']
try:
    print(Myvariable)
except Nameerror:
    print('variable \"Myvariable\" not found')

надеюсь, что это поможет!

Ответ 11

Это будет работать, чтобы увидеть, существует ли вообще переменная.

if myvar:
    #It exists
else:
    #It doesn't exist