如何在"var"不存在时也说"if var:"?

2 投票
2 回答
4469 浏览
提问于 2025-04-19 13:46

这个代码可以正常运行:

a = 1
if a:
  b = a

但是这个代码就不行:

if a:
  b = a

这不是说这个“if”语句会被执行,因为我们明确地说了……

 "if a exists" 

那么为什么会出错呢?如果它不存在,那在这个if语句的条件下就什么都不要做呀。

更新

原来“if a”在Python中是指“如果a有值”。

我想找的是“如果a存在,那就继续”的写法。

2 个回答

3

当一个名字不存在的时候(也就是说,它没有被绑定,也就是没有给它赋值,没有import语句把某个对象赋给这个名字,也没有函数参数),Python就会抛出一个异常。

你可以处理这个异常;如果是全局名字,会抛出一个NameError,如果是局部名字,则会抛出UnboundLocalError。使用try...except语句来捕获异常,也可以告诉你是否没有抛出异常:

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

有关名字存在与否的详细信息,请查看执行模型文档

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

文档中提到:

请求原谅总比请求许可要简单。这是一种常见的Python编码风格,假设某些有效的键或属性是存在的,如果这个假设不成立,就会捕获异常。这种干净且快速的风格通常会有很多try和except语句。

撰写回答