我想检查变量是否存在。现在我在做这样的事情:
try:
myVar
except NameError:
# Do something.
有没有其他没有例外的方法?
我想检查变量是否存在。现在我在做这样的事情:
try:
myVar
except NameError:
# Do something.
有没有其他没有例外的方法?
当前回答
查询一个局部变量是否存在。
if 'myVar' in locals():
# myVar exists.
检查全局变量是否存在:
if 'myVar' in globals():
# myVar exists.
检查一个对象是否有属性:
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.
其他回答
它可能不是高性能的,但您将解决方案泛化为一个同时检查局部变量和全局变量的函数。
import inspect
def exists_var(var_name):
frame = inspect.currentframe()
try:
return var_name in frame.f_back.f_locals or var_name in globals()
finally:
del frame
然后你可以这样使用它:
exists_var('myVar')
处理这种情况的一种方法通常是不显式检查变量是否存在,而是直接将可能不存在的变量的第一次使用包装在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
...
简短的变体:
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__
catch被调用,除非在Python中。除此之外,对于这种简单的情况,它是可以接受的。AttributeError可以用来检查对象是否有属性。