确定变量是否在Python中定义

时间:2009-10-20 05:03:36

标签: python variables defined

  

可能重复:
  Easy way to check that variable is defined in python?
  How do I check if a variable exists in Python?

如何知道变量是否已在运行时在代码中的特定位置设置?这并不总是显而易见的,因为(1)变量可以有条件地设置,(2)变量可以有条件地删除。我正在寻找Perl中的defined()或PHP中的isset()或Ruby中的defined?

if condition:
    a = 42

# is "a" defined here?

if other_condition:
    del a

# is "a" defined here?

7 个答案:

答案 0 :(得分:553)

try:
  thevariable
except NameError:
  print "well, it WASN'T defined after all!"
else:
  print "sure, it was defined."

答案 1 :(得分:296)

'a' in vars() or 'a' in globals()

如果你想要迂腐,你也可以检查内置物 'a' in vars(__builtins__)

答案 2 :(得分:113)

我认为最好避免这种情况。写起来更清晰,更清晰:

a = None
if condition:
    a = 42

答案 3 :(得分:14)

try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope

答案 4 :(得分:5)

对于这种特殊情况,最好是a = None而不是del a。这将减少对象a的引用计数(如果有)分配给,并且在未定义a时不会失败。注意,del语句不直接调用对象的析构函数,而是从变量中取消绑定它。当引用计数变为零时,将调用对象的析构函数。

答案 5 :(得分:5)

可能需要这样做的一种情况:

如果您使用finally块来关闭连接,但在try块中,程序会在定义连接之前以sys.exit()退出。在这种情况下,将调用finally块,并且连接关闭语句将失败,因为没有创建连接。

答案 6 :(得分:-3)

如果想要捕获尝试访问对象内部未定义的变量,有一种非常简单的方法:

class Whatever(object):
  def __getattr__(self, key):
    return None

这里,python首先尝试在对象或对象树中查找属性,并且只有在失败时才会调用__getattr__(self, key)函数。 这意味着,如果调用__getattr__,我们只需返回None