这很基础,但我在编码时开始想知道是否有一种Pythonic的方法来检查某个东西是否不存在。如果它为真,这是我如何做的:
var = 1
if var:
print 'it exists'
但是当我检查某些东西不存在时,我经常会这样做:
var = 2
if var:
print 'it exists'
else:
print 'nope it does not'
如果我只关心kn,那么这似乎是一种浪费。有没有一种方法可以在没有else的情况下检查某个东西是否不存在?
这很基础,但我在编码时开始想知道是否有一种Pythonic的方法来检查某个东西是否不存在。如果它为真,这是我如何做的:
var = 1
if var:
print 'it exists'
但是当我检查某些东西不存在时,我经常会这样做:
var = 2
if var:
print 'it exists'
else:
print 'nope it does not'
如果我只关心kn,那么这似乎是一种浪费。有没有一种方法可以在没有else的情况下检查某个东西是否不存在?
采用 LBYL 风格,即 "先看后跳":
var_exists = 'var' in locals() or 'var' in globals()
EAFP风格,即“宁愿请求原谅也不要请求许可”:
try:
var
except NameError:
var_exists = False
else:
var_exists = True
在Python编程时,更倾向于使用第二种风格(EAFP),因为它通常更可靠。
我认为你在术语上必须小心,存在和求值为False是两回事。假设你想要后者,你可以简单地执行:
if not var:
print 'var is False'
对于前者,它将不够优雅:
try:
var
except NameError:
print 'var not defined'
我将冒险猜测,您想要检查变量是否已定义的原因可能可以用更加优雅的方式解决。
config = config()
然后 if not config:
给我返回 "local variable config referenced before assignment" :) - holmsmydict['ggg'] = '' // doesn't matter if it is empty value or not.
if mydict.has_key('ggg'):
print "OH GEESH"
has_key()
,因此Python的正确做法是使用in
。'ggg' in mydict # this is it!
# True if it exists
# False if it doesn't
您也可以对元组、列表和集合使用 in
。
当然,如果变量未定义,您将不得不静默地引发异常(只需引发任何异常……让它通过),如果异常不是您想要看到的(这对于许多应用程序很有用,您只需要记录异常即可)。
在使用变量之前定义变量总是安全的(您将遇到“本地引用前分配”错误,即“ var 不在作用域内”)。如果您对查询执行某些操作,则可能希望拥有一个字典,并检查是否存在键,使用 in
。
if not var:
#Var is None/False/0/
if var:
#Var is other then 'None/False/0'
在Python中,如果变量的值为None/False/0,则If var
条件将失败...
而对于其他对象,它将调用__nonzero__
Pythonic方法,该方法可能根据其功能返回True
或False
。
检查变量是否已定义:
var = 2
try:
var
except NameError:
print("No var")
检查是否为None/False
if var is None
...or
if not var
if not var:
print 'nope it does not'
尽管这是为了检查变量是否为 false / none,如果未定义 var,则会出错。
要检查 var 是否已定义:
try:
var
except NameError:
print 'not defined'
var
实际上不存在,那么当您尝试使用它时会引发异常。这超出了if
/else
可以处理的范围。if var
假定var
存在,并测试它是否为“真值”(如果转换为布尔值,则变为True而不是False)。 - Karl KnechtelTrue
作为布尔上下文。 - FallenAngel