Easy way to check that a variable is defined in python?
是否有任何方法可以检查是否定义了具有指定名称的变量(类成员或独立变量)?例子:
1 2 3 4
| if"myVar" in myObject.__dict__ : # not an easy way
print myObject.myVar
else
print"not defined" |
- 第三方类,需要为我的私人目的设置一个标志,不想弄乱类uuinit_uuu()。
- 这真让人困惑。为什么要编写大量的代码来确定使用了哪些变量?只需创建一个实例,即print instance.uudict_uukeys()或do dir(instance),就可以知道所有属性名。
- 恐怕我也很困惑。这个问题涉及到类成员和独立变量。显然,独立的顶级var没有init;什么第三方miasma构建得这么差,以至于它的许多变量,在多个作用域级别,都有完全不存在的风险?
- 下面是一个例子,引导我提出这个问题。在一个Django应用程序中,我们有一个设置模块,其中有一些可选设置,如"myList=[1,2]"。如果列表存在,我想扩展它(mylist+=[3]),或者定义它(mylist=[3])。
- @S.lott我也在这里,因为有一个设置文件。如果在设置文件中设置了变量,我想使用它。如果不是,我想做点别的。将所有可能的设置变量初始化为"无"似乎是不切实际的。
紧凑的方式:
1
| print myObject.myVar if hasattr(myObject, 'myVar') else 'not defined' |
不过,HTW的方式更像是Python。
hasattr()与x in y.__dict__不同,但是:hasattr()考虑继承的类属性,以及从__getattr__返回的动态类属性,而y.__dict__只包含y实例属性的对象。
- 我想他只是在找hasattr()。
- 是的,很可能。那么一个全局变量呢?(在模块中声明,而不是在类命名空间中声明)?
- @地狱之眼:也许(globals()中的x),但我真正的答案是需要这样做的代码是非pythonic,并且应该将变量初始化为none。
- 不要错过这个答案:stackoverflow.com/a/843293/1447509
1 2 3 4
| try:
print myObject.myVar
except NameError:
print"not defined" |
- 至少获得变量并输出正确:-)+1
- 如果定义了myObject,但没有"myvar",您将得到一个attributeError。
保罗是对的,如果需要的话,你做事的方式可能会有问题。但是,如果你只是做一些快速和肮脏的事情,你可能不关心习惯的PythonAnway,那么这可能会更短。
1 2
| try: x
except: print"var doesn't exist" |
要测试是否定义了变量myvar:
1
| result = dir().count('myvar') |
如果定义myvar,则结果为1,否则结果为0。
这在Python版本3.1.2中很好地工作。
- 那么,为什么不只是'myvar' in dir()?
阅读和或使用python技巧:locals()中的"a"和