In Python, how do I check if a variable exists?
如果"X"存在,则打印"X存在"。
我问这个是因为我总是会得到这个错误:
1 2
| UnboundLocalError at /settings/
local variable 'avatarlink' referenced before assignment |
- 重申:一般来说,不要使用locals(),globals(),不要捕获UnboundLocalError,改为修复代码。请阅读答案stackoverflow.com/questions/575196/…中提供的关于python中作用域、名称空间、命名和绑定的链接。
- -1:如果总是出现这种错误,那么就存在设计问题。你不需要"测试"一个变量,你需要修复你的设计。为什么你"总是"得到这个错误?你犯了什么设计错误?
- 如何检查python中是否存在一个变量的标题与这个标题几乎相同。这两个问题有什么不同吗?
正如他们在Python中所说,"请求宽恕总比请求允许好"。所以,只需尝试访问变量,如果它不存在,就捕获错误。
1 2 3 4 5
| try:
x
print"x exists"
except UnboundLocalError:
print"x doesn't exist" |
不过,我很想知道你为什么认为你需要这样做。通常,在检查变量值之前,您总是先设置变量。
你为什么要知道?如果代码因为这个而中断,可能是因为代码无论如何都是错误的,需要修复。
也就是说,试着检查if 'x' in locals()或if 'x' in globals(),以适合您期望的位置。
- 为了澄清,您需要引用名称('avatarlink' in locals())。但第一段是真正的解决方案。+ 1
- @当然,德尔南;增加了一些引用来反映这一点。
- 虽然这确实是您问题的正确答案,但如果您需要使用这样的检查,请考虑卡尔关于您的代码可能被破坏的评论。你目前正在治疗症状,而不是病因,这始终是个坏主意。
- -你不需要if。只需将变量名放在try和except NameError:中。除了更简单之外,您还可以像python那样检查存在性,而不是将其限制为locals、"globals"等。
- @马蒂诺,我熟悉EAFP,但这似乎是一个相当极端的原则应用:)
- +1:"无论如何,代码是错误的,需要修复。"
- @S.lott:代码已经被修正了……但是谁/你在投票和引用什么——一些删除的评论?
- @KarlKnechtel:由于这显然不应该首先发生,我认为使用这种"极端"的EAFP应用是完全有必要的。它有更多的代码行,但执行的查找顺序与Python通常用于任何名称的查找顺序完全相同,而这正是失败和导致错误的原因。这也排除了答案中的'key' in whatever方法只是在错误的地方寻找的可能性。
- @马蒂诺:"你投谁/什么票?"这不是一个明智的问题。一人赞成一个答案。还有什么可以被否决的?"一些删除的评论?这不是问题的合理部分。引用的单词是答案的一部分。请澄清这个评论——这真的很难分析。
- @洛特:有可能提高投票评论和答案。我问这个问题是因为我没有看到你在答案中引用的单词,可能是因为它在我的浏览器中是分词的——所以我不知道引用了什么代码。抱歉,我很困惑,谢谢你最终告诉我我想知道的。
您可以检查x是否在globals()或locals()中。
1 2 3 4 5 6
| try:
variable
except NameError:
print"It doesn't Exist!"
else:
print"It exists!" |
在Python中,您真的不应该使用尚未设置的变量。如果需要,可以将avatarlink设置为none。