怎么说“if var:”即使“var”根本不存在?

时间:2014-09-03 11:23:00

标签: python python-2.7

这样可以正常工作:

a = 1
if a:
  b = a

但这不起作用:

if a:
  b = a

由于我们明确地说...

,因此不会执行此“if”语句
 "if a exists" 

那为什么会出错呢?如果它不存在则只是在if语句的参数内不做任何事情。

更新

事实证明“如果一个”意味着......“如果一个值”意味着在python中。

我正在寻找“如果一个存在然后前进”的等效性

2 个答案:

答案 0 :(得分:7)

您可以使用locals()

if 'a' in locals():
    # variable 'a' is defined

您还可以使用Python的原则,即要求宽恕比允许更容易:

try:
    b
    # if we get here, variable 'b' is defined
except NameError:
    # variable 'b' is not defined

the documentation中所述:

  

比获得许可更容易请求宽恕。这种常见的Python编码风格假设存在有效的键或属性,并且如果假设被证明是错误则捕获异常。这种干净,快速的风格的特点是存在许多尝试和除外的陈述。

答案 1 :(得分:3)

如果名称​​不存在(尚未绑定,因此没有任何约束绑定值,则不存在指定的import个语句一个导入的对象到名称,不存在函数参数),然后Python抛出异常。

你可以处理那个例外;全局名称抛出NameError,本地名称将引发UnboundLocalError。使用try...except语句捕获异常也可以告诉您是否抛出了异常:

try:
    somename
except NameError:
    # name does not exist
else:
    # name exists

请参阅Execution model documentation了解名称的存在与否。