我想检查变量是否存在。现在我在做这样的事情:

try:
    myVar
except NameError:
    # Do something.

有没有其他没有例外的方法?


当前回答

对于对象/模块,也可以

'var' in dir(obj)

例如,

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

其他回答

简短的变体:

my_var = some_value if 'my_var' not in globals() else my_var:

对象也可以使用__dict__。

class A(object):
    def __init__(self):
        self.m = 1

a = A()
assert "m" in a.__dict__
assert "k" not in a.__dict__

对于对象/模块,也可以

'var' in dir(obj)

例如,

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

catch被调用,除非在Python中。除此之外,对于这种简单的情况,它是可以接受的。AttributeError可以用来检查对象是否有属性。

查询一个局部变量是否存在。

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

检查全局变量是否存在:

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

检查一个对象是否有属性:

if hasattr(obj, 'attr_name'):
  # obj.attr_name exists.