我想检查变量是否存在。现在我在做这样的事情:
try:
myVar
except NameError:
# Do something.
有没有其他没有例外的方法?
我想检查变量是否存在。现在我在做这样的事情:
try:
myVar
except NameError:
# Do something.
有没有其他没有例外的方法?
当前回答
它可能不是高性能的,但您将解决方案泛化为一个同时检查局部变量和全局变量的函数。
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是测试变量是否存在的最佳方法。但是几乎可以肯定有比设置/测试全局变量更好的方法。
例如,如果你想在第一次调用某个函数时初始化一个模块级变量,你最好使用这样的代码:
my_variable = None
def InitMyVariable():
global my_variable
if my_variable is None:
my_variable = ...
简短的变体:
my_var = some_value if 'my_var' not in globals() else my_var:
它可能不是高性能的,但您将解决方案泛化为一个同时检查局部变量和全局变量的函数。
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')
对于对象/模块,也可以
'var' in dir(obj)
例如,
>>> class Something(object):
... pass
...
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
True
>>> 'b' in dir(c)
False
查询一个局部变量是否存在。
if 'myVar' in locals():
# myVar exists.
检查全局变量是否存在:
if 'myVar' in globals():
# myVar exists.
检查一个对象是否有属性:
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.