关于python:检查是否存在什么东西的python方法?

Pythonic way to check if something exists?

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

这是非常基本的,但我正在编码,开始想知道是否有一种Python的方式来检查是否有什么东西不存在。如果它是真的,我会这样做:

1
2
3
var = 1
if var:
    print 'it exists'

但是,当我检查某些东西是否不存在时,我经常这样做:

1
2
3
4
5
var = 2
if var:
    print 'it exists'
else:
    print 'nope it does not'

如果我只关心针织品的话,这似乎是一种浪费。有没有一种方法可以检查没有其他东西就不存在?


lbyl风格,"三思而后行":

1
var_exists = 'var' in locals() or 'var' in globals()

EAFP风格,"请求宽恕比许可更容易":

1
2
3
4
5
6
try:
    var
except NameError:
    var_exists = False
else:
    var_exists = True

在用Python进行编码时,最好使用第二种样式(EAFP),因为它通常更可靠。


我认为你必须小心使用你的术语,是否有什么东西存在,以及是否有东西评估为错误是两个不同的东西。如果你想要后者,你可以简单地做到:

1
2
if not var:
   print 'var is False'

对于前者来说,它就不那么优雅了:

1
2
3
4
try:
   var
except NameError:
   print 'var not defined'

不过,我将进行一次跳跃和冒险,无论是什么让您想要检查变量是否被定义,都可能以更优雅的方式解决。


如果这是一本字典,你可以

1
2
3
mydict['ggg'] = ''   // doesn't matter if it is empty value or not.
if mydict.has_key('
ggg'):
   print"OH GEESH"

但是,从python 3.x中完全删除了has_key(),因此python的方法是使用in

1
2
3
'ggg' in mydict     # this is it!
# True if it exists
# False if it doesn't

您也可以使用in作为tuple、list和set。

当然,如果变量还没有定义,您将不得不静默地引发异常(只需引发任何异常…让它通过),如果您不想看到异常(这对许多应用程序很有用,您只需要记录异常。)

在使用变量之前定义它总是安全的(在本地引用之前会遇到"赋值",这意味着用简单的英语来说"var不在范围内")。如果您对查询做了一些操作,那么机会是,您需要有一个字典,并检查键是否存在,使用in


要检查是否定义了var:

1
2
3
4
5
6
var = 2

try:
    varz
except NameError:
    print("No varz")

检查是否为无/假

1
if varz is None

或…

1
if not varz

否定呢?

1
2
if not var:
    print 'nope it does not'

尽管这是为了查看var是否为false/none,如果没有定义var,它会爆炸。

要查看是否定义了var:

1
2
3
4
try:
    var
except NameError:
    print 'not defined'

1
2
3
4
5
if not var:
    #Var is None/False/0/

if var:
    #Var is other then 'None/False/0'

在python中,如果varibale的值为none/false/0,那么If var条件将失败…

对于其他对象,它将调用__nonzero__pythonic方法,根据其功能,该方法可能返回TrueFalse