这是非常基本的,但我编码并开始想知道是否有一种pythonic方法来检查是否存在某些东西。如果它是真的,我就是这样做的:
var = 1
if var:
print 'it exists'
但是当我检查是否存在某些东西时,我经常做这样的事情:
var = 2
if var:
print 'it exists'
else:
print 'nope it does not'
如果我所关心的只是一种浪费,那么看起来就像浪费一样,如果没有别的东西,有没有办法检查是否存在某些东西?
答案 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方法,该方法可能会返回True
或False
,具体取决于其功能。