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

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

其他回答

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

对于对象/模块,也可以

'var' in dir(obj)

例如,

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

这是我的设想:

for i in generate_numbers():
    do_something(i)
# Use the last i.

我不能轻易确定迭代对象的长度,这意味着I可能存在,也可能不存在,这取决于迭代对象是否产生一个空序列。

如果我想使用iterable的最后一个I(一个空序列不存在的I),我可以做以下两件事之一:

i = None  # Declare the variable.
for i in generate_numbers():
    do_something(i)
use_last(i)

or

for i in generate_numbers():
    do_something(i)
try:
    use_last(i)
except UnboundLocalError:
    pass  # i didn’t exist because sequence was empty.

第一个解决方案可能有问题,因为我不能告诉(取决于序列值)I是否是最后一个元素。第二种解决方案在这方面更为准确。

对象也可以使用__dict__。

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

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

简短的变体:

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