确定是否在python中定义变量

Determine if variable is defined in Python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
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?

1
2
3
4
5
6
7
8
9
if condition:
    a = 42

# is"a" defined here?

if other_condition:
    del a

# is"a" defined here?


1
2
3
4
5
6
try:
  thevariable
except NameError:
  print"well, it WASN'T defined after all!"
else:
  print"sure, it was defined."


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

如果你想去,你可以检查pedantic,内置了'a' in vars(__builtins__)


我认为它的更好,以避免的情况。它的清洁和clearer写:

1
2
3
a = None
if condition:
    a = 42


1
2
3
4
try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope


一个可能的情况,这可能是必要的。

如果你是用finally块可在关闭连接try程序块退出,sys.exit()定义为在与连接。在这个案例,将被称为finally块和语句将失败,因为连接关闭的连接被创建。


在这个特殊的案例,它的更好的del aa = None来代替。这将是对对象的引用计数a减量(如有)的分配和a不会失败时,是不确定的。注意,不是del语句的析构函数调用一个对象的直接变量,但是可以从解放。一个被称为析构函数的时候,对象所在的参考计数为零。


如果想吸引到一个访问的非诸因素定义的变量内的物件,有一个非常简单的方式这样做。

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

在这里,第一tries找到Python属性在对象或对象的树,如果是在一个被称为__getattr__(self, key)函数失败。这一个被称为__getattr__均值,如果我们可以简单的返回None