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中完全删除了
1 2 3 | 'ggg' in mydict # this is it! # True if it exists # False if it doesn't |
您也可以使用
当然,如果变量还没有定义,您将不得不静默地引发异常(只需引发任何异常…让它通过),如果您不想看到异常(这对许多应用程序很有用,您只需要记录异常。)
在使用变量之前定义它总是安全的(在本地引用之前会遇到"赋值",这意味着用简单的英语来说"var不在范围内")。如果您对查询做了一些操作,那么机会是,您需要有一个字典,并检查键是否存在,使用
要检查是否定义了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,那么
对于其他对象,它将调用