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。