即使“var”根本不存在,如何说“if var:”? [复制]
Posted
技术标签:
【中文标题】即使“var”根本不存在,如何说“if var:”? [复制]【英文标题】:How to say "if var:" even if "var" does not exist at all? [duplicate] 【发布时间】:2014-10-27 21:05:53 【问题描述】:这样可以正常工作:
a = 1
if a:
b = a
但这不起作用:
if a:
b = a
鉴于我们明确表示,不会执行这个“if”语句..
"if a exists"
那为什么会出错呢?如果它不存在,那么就不要在该 if 语句的参数内做任何事情。
更新
原来“if a”的意思是……“if a value for a”在python中的意思。
我正在寻找“如果 a 存在则继续前进”的等价物
【问题讨论】:
你不是说'如果a
存在'。您在问值a
引用是真还是假。命名引用对象,对象有一个布尔值。
为什么需要知道名称是否已定义?听起来好像你想先做a = None
。
Python 名称的良好入门:nedbatchelder.com/text/names.html
你可以赶上NameError
。但关键是,这根本不是您通常在 Python 中编码的方式。你应该*知道”a
是否在那个时候被定义,如果这意味着更早将None
分配给它,就这样吧。
变量不是学生,试图通过它们之间的类比进行编码是没有帮助的。
【参考方案1】:
你可以使用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 编码风格假设存在有效的键或属性,如果假设被证明是错误的,则捕获异常。这种简洁快速的风格的特点是存在许多 try 和 except 语句。
【讨论】:
【参考方案2】:当名称不存在(尚未绑定,因此没有将值绑定到它的赋值,不存在将导入对象分配给名称的import
语句并且不存在函数参数),那么 Python 会抛出异常。
您可以处理该异常;全局名称抛出 NameError
,本地名称抛出 UnboundLocalError
。使用try...except
语句捕获异常也可以告诉您是否没有抛出异常:
try:
somename
except NameError:
# name does not exist
else:
# name exists
请参阅Execution model documentation,了解名称存在与否的原因。
【讨论】:
以上是关于即使“var”根本不存在,如何说“if var:”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
什么是 PHP 简写:print var if var exists