即使“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

如何在 switch 语句中使用大于或等于

为啥不使用嵌套的 if 语句有啥具体原因吗? [关闭]

Java中的布尔表达式

linux sh 读取文件内容,if判读语句,变量var打印

分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)