Pythonic方式检查是否存在某些东西?

时间:2012-02-22 06:29:30

标签: python if-statement

这是非常基本的,但我编码并开始想知道是否有一种pythonic方法来检查是否存在某些东西。如果它是真的,我就是这样做的:

var = 1
if var:
    print 'it exists'

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

var = 2
if var:
    print 'it exists'
else:
    print 'nope it does not'

如果我所关心的只是一种浪费,那么看起来就像浪费一样,如果没有别的东西,有没有办法检查是否存在某些东西?

6 个答案:

答案 0 :(得分:110)

LBYL风格,“在你跳跃之前看”:

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

EAFP风格,“比允许更容易请求宽恕”:

try:
    var
except NameError:
    var_exists = False
else:
    var_exists = True

在Python编码时首选第二种样式(EAFP),因为它通常更可靠。

答案 1 :(得分:20)

我认为你必须小心你的术语,无论是存在还是评估 False 的东西是两回事。假设你想要后者,你可以简单地做:

if not var:
   print 'var is False'

对于前者,它会更不优雅:

try:
   var
except NameError:
   print 'var not defined'

然而,我想进行一次飞跃和冒险,无论是什么让你想要检查一个变量是否被定义,都可能以更优雅的方式解决。

答案 2 :(得分:3)

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

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

但是,has_key()已从Python 3.x中完全删除,因此,Python的方式是使用in

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

您可以将in用于元组,列表和设置。


当然,如果尚未定义变量,则必须以静默方式引发异常(只是引发任何异常......让它通过),如果异常不是您想要看到的(这对于许多应用程序,您只需要记录异常。)


在使用它之前定义一个变量总是安全的(你将遇到“在本地引用之前的赋值”,这意味着“var不在范围内”,用简单的英语表示)。如果您对查询执行某些操作,则可能需要使用字典,并检查密钥是否存在,请使用in

答案 3 :(得分:2)

检查是否已定义var:

var = 2

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

检查是否为无/错误

if varz is None

......或

if not varz

答案 4 :(得分:1)

否定呢?

if not var:
    print 'nope it does not'

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

查看是否定义了var:

try:
    var
except NameError:
    print 'not defined'

答案 5 :(得分:1)

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,具体取决于其功能。