检查某物是否存在的Pythonic方法?

问题描述 投票:0回答:7

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

var = 1
if var:
    print 'it exists'

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

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

如果我只关心知道是否有一种方法可以检查某些东西是否不存在而不存在其他东西,这似乎是一种浪费?

python if-statement
7个回答
218
投票

LBYL风格,“三思而后行”:

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

EAFP 风格,“请求原谅比请求许可更容易”:

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

在Python中编码时更喜欢第二种风格(EAFP),因为它通常更可靠。


46
投票

我认为你必须小心你的术语,“存在”和“假”是否是两个不同的东西。假设您想要后者,您可以简单地执行以下操作: if not var: print 'var is False' 对于前者来说,那就不太优雅了:

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

然而,我将大胆尝试,无论是什么让你想要检查变量是否已定义,都可以用更优雅的方式解决。


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


8
投票

但是,

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

.

检查 var 是否已定义:


6
投票

检查是否为 None/False

if var is None

...或者

if not var

if not var:
    #Var is None/False/0/

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

5
投票
If var
 条件将失败...

对于其他对象,它将调用

__nonzero__
pythonic 方法,该方法可能返回

True

False
,具体取决于其功能。
    
否定呢?


3
投票

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

查看 var 是否已定义:

try: var except NameError: print 'not defined'

我经常发现,当我想要在变量存在时执行某些操作或在变量不存在时执行其他操作时,我无论如何都需要一个函数。因此,您可能想要调用一个函数,如果变量存在,则该函数将以一种方式运行,如果不存在,则以另一种方式运行。在这种情况下,您可以将变量的默认值设置为 None,以便在使用变量调用函数时以一种方式运行,如果不使用变量调用函数则以不同的方式运行:

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.