如何检查变量是否存在?
我想检查变量是否存在。现在我正在做这样的事情:
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.
在任何语言中,使用尚未定义或设置(隐式或显式)的变量通常是一件坏事,因为它往往表明程序的逻辑没有得到适当的思考,并且可能导致不可预测的行为。
如果您需要在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
在尚未绑定到值的情况下,这在Python中根本没有帮助,因为即使检查也会引发异常。一个更好的主意是确保确实有一个值,一个可以用来决定它是否有效的值。这将是这样的:last
last
last
last = None
# some time passes ...
if last is not None:
draw(last, current);
last = current
这确保了变量的存在,并且只有当它对于您需要它的内容有效时,您才使用它。这就是我假设在注释代码中应该做的事情(但没有),如果您无法控制变量的初始设置,您仍然可以使用上面的 exception 方法添加代码来强制执行此操作:if last
# 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