如何检查变量是否存在?

33 浏览
0 Comments

如何检查变量是否存在?

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

try:
    myVar
except NameError:
    # Do something.

有其他不使用异常的方法吗?

admin 更改状态以发布 2023年5月22日
0
0 Comments

在任何语言中,使用尚未定义或设置(明示或暗示)的变量通常都是不好的,因为这往往表明程序逻辑没有被正确地思考,很可能会导致不可预测的行为。

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

0
0 Comments

检查局部变量是否存在:

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

检查全局变量是否存在:

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

检查对象是否具有属性:

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

0