如何检查变量是否存在?

新手上路,请多包涵

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

 try:
    myVar
except NameError:
    # Do something.

是否还有其他方法无一例外?

原文由 Max Frai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

检查局部变量是否存在:

 if 'myVar' in locals():
  # myVar exists.

检查全局变量是否存在:

 if 'myVar' in globals():
  # myVar exists.

检查对象是否具有属性:

 if hasattr(obj, 'attr_name'):
  # obj.attr_name exists.

原文由 Ayman Hourieh 发布,翻译遵循 CC BY-SA 2.5 许可协议

使用尚未定义或设置(隐式或显式)的变量在 任何 语言中通常都是一件坏事,因为它往往表明程序的逻辑没有被正确考虑,并且很可能导致在不可预测的行为中。

如果您 需要 在 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

这样可以确保变量存在,并且您仅在它对您需要它的用途有效时才使用它。这就是我假设 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

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题