如何检查一个变量是否存在?
我想检查一个变量是否存在。现在我正在这样做:
try:
myVar
except NameError:
# Do something.
有没有其他方法可以做到这一点,而不需要用到异常处理?
16 个回答
93
一种简单的方法是一开始就把它初始化为 myVar = None
然后在后面的代码中:
if myVar is not None:
# Do something
185
使用那些还没有被定义或设置的变量(无论是隐式还是显式)通常是不好的,因为这往往意味着程序的逻辑没有经过充分的考虑,可能会导致不可预测的行为。
如果你在Python中确实需要这样做,可以使用下面这个小技巧,确保在使用变量之前,它有某个值:
try:
myVar
except NameError:
myVar = None # or some other default value.
# Now you're free to use myVar without Python complaining.
你选择给它的值当然要根据你想要做的事情来决定。例如,如果这是某个累加器的起始值,你可以把它设为零。
不过(这是我的个人看法),最好还是重构你的代码,避免这种情况的发生。
举个例子,下面的代码在这个回答中被提到,用于从之前的点绘制到当前点:
if last:
draw(last, current);
last = current
如果last
没有被赋值,这在Python中是没用的,因为即使是检查last
也会引发异常。更好的做法是确保last
确实有一个值,这个值可以用来判断它是否有效。可以这样做:
last = None
# some time passes ...
if last is not None:
draw(last, current);
last = current
这样可以确保变量存在,并且只有在它对你需要的事情有效时才使用它。
如果你无法控制变量的初始设置,仍然可以通过使用上面提到的异常处理方法来强制这样做:
# Variable 'last' may or may not be bound to a value at this point.
try:
last
except NameError:
last = None
# It will always now be bound to a value at this point.
if last is not None:
draw(last, current);
last = current
2304
要检查一个本地变量是否存在:
if 'myVar' in locals():
# myVar exists.
要检查一个全局变量是否存在:
if 'myVar' in globals():
# myVar exists.
要检查一个对象是否有某个属性:
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.