这样可以正常工作:
a = 1
if a:
b = a
但这不起作用:
if a:
b = a
由于我们明确地说...
,因此不会执行此“if”语句 "if a exists"
那为什么会出错呢?如果它不存在则只是在if语句的参数内不做任何事情。
更新
事实证明“如果一个”意味着......“如果一个值”意味着在python中。
我正在寻找“如果一个存在然后前进”的等效性
答案 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了解名称的存在与否。