【问题标题】:In Python, how do I check if a variable exists? [duplicate]在 Python 中,如何检查变量是否存在? [复制]
【发布时间】:2011-05-20 04:11:17
【问题描述】:

如果“x”存在,则打印“x 存在”。

我问这个是因为我总是收到这个错误:

UnboundLocalError at /settings/
local variable 'avatarlink' referenced before assignment

【问题讨论】:

  • 重申:一般情况下,不要使用locals()globals(),不要抓UnboundLocalError,而是修复你的代码。请阅读答案 stackoverflow.com/questions/575196/… 中提供的 Python 中范围、命名空间、命名和绑定的链接
  • -1:如果您总是收到此错误,则说明您有设计问题。您不需要“测试”变量,您需要修复您的设计。为什么您“总是”收到此错误?你犯了什么设计错误?
  • How do i check if a variable exists in python 的标题几乎与此相同。这两个问题有什么不同吗?

标签: python debugging variables object


【解决方案1】:

为什么你需要知道?如果代码因此而中断,则可能是因为代码无论如何都是错误的,需要修复。

也就是说,请尝试检查if 'x' in locals()if 'x' in globals(),以根据您的预期进行检查。

【讨论】:

  • 为了澄清,您需要引用名称 ('avatarlink' in locals())。但第一段是真正的解决方案。 +1
  • @delnan 当然;添加引号以反映这一点。
  • 虽然这确实是您问题的正确答案,但也请考虑 Karl 的评论,如果您需要使用这样的检查,您的代码可能已损坏。您目前正在治疗症状,而不是原因,这总是一个坏主意。
  • -1 你不需要if。只需将变量名放在tryexcept NameError: 中。除了更容易之外,您还可以像 Python 一样检查存在性,而不是将其限制为 locals、'globals` 等。
  • @martineau 我对 EAFP 很熟悉,但这似乎是该原理的一个非常极端的应用:)
【解决方案2】:

正如他们在 Python 中所说,“请求宽恕比请求许可更好”。因此,只需尝试访问该变量,如果它不存在则捕获错误。

try:
    x
    print "x exists"
except UnboundLocalError:
    print "x doesn't exist"

但是,我真的很想知道您为什么认为需要这样做。通常,您总是会在检查其值之前设置变量。

【讨论】:

    【解决方案3】:

    您可以检查 x 是否在 globals()locals() 中。

    【讨论】:

      【解决方案4】:

      在 python 中,你真的不应该使用尚未设置的变量。如果需要,您可以将 avatarLink 设置为 None。

      【讨论】:

        【解决方案5】:
        try:
          variable
        except NameError:
          print "It doesn't Exist!"
        else:
          print "It exists!"
        

        【讨论】:

          猜你喜欢
          • 2014-03-25
          • 2020-10-21
          • 2018-08-13
          • 1970-01-01
          • 1970-01-01
          • 2017-01-27
          • 2010-10-25
          • 2011-10-17
          相关资源
          最近更新 更多