【问题标题】:Warning on Python global variable declarationPython 全局变量声明警告
【发布时间】:2017-06-02 11:33:27
【问题描述】:

这个可以忽略吗。我收到如下所述的警告。我的代码将如何成功?无论出于何种原因,我都必须在我的程序中在全局范围内拥有这个 ignoreList 变量。而且我也不知道为什么它不打印else:块打印语句。

try:
    ignoreList
except NameError:
    global ignoreList
else:
    print 'If property of ignoreList is not set, then please adjust properties to be set for ignoreList'    

这是在 python IDLE 中执行程序时的警告

警告(来自警告模块):文件 “C:\Users\Sathasivam_Anand\Documents\ignore_list_check.py”,第 4 行 global ignoreList SyntaxWarning: name 'ignoreList' is used before global declaration

>>> ===== RESTART: C:\Users\Sathasivam_Anand\Documents\ignore_list_check.py =====

【问题讨论】:

  • 变量ignoreList应该做什么?
  • 如果你必须在全局范围内有一个变量,为什么不干脆在全局范围内创建它呢? ignoreList=[] 或者它的默认值应该是什么。
  • 我做到了ignoreList = '',它给出了预期的解决方案。谢谢!
  • 虽然我不是反对者之一,但我可以推测您的问题被认为非常非常简单,并且错误消息已经完全澄清了。

标签: python environment-variables


【解决方案1】:

如果没有更多上下文,您的代码片段就没有多大意义。要更好地理解关键字,请查看:Use of “global” keyword in Python

至于您的代码,它使变量在出错后仅在全局范围内可用,这是不寻常的。正如警告所示,您将/应该从一开始就定义变量 ignoreList 一个全局变量以消除错误。问题是为什么你只在代码一开始就遇到错误时才公开它。

此外,如果您没有将它包含在某种函数或其他封装中,global 关键字在上下文中不会做任何事情。

作为一个示例,您需要使用 global 来在另一个范围内公开变量:

def test():
    global a
    a = 10
    return 20
b = test()
print(a,b)

一个没有意义的例子,因为只有一个范围开始:

a = 10
global a
b = 20
print(a,b)

您的代码片段会指出这种情况,因为您缺少额外的缩进。你可能故意省略了它,但也省略了关于它周围的代码的任何信息(例如,如果它放在一个函数中)你的代码没有多大意义。

【讨论】:

  • 当我尝试类似这样的事情时失败了,-global a = 10。你确定这是正确的方法吗?
  • @DevAnandSadasivam: global a = 10 是错误的:你不能在 global 语句中进行赋值。但是 Seth 说在全局上下文中(即在函数或类定义之外)的 global 语句没有效果是正确的。通常,您确实应该尽量避免在代码中使用可修改的全局变量,因为它们会使代码非模块化(这使得测试、维护和调试变得更加困难),几乎总有更好的方法。
  • 很抱歉这个错误。通过将它分成两行它可以工作,我相应地修复了这个例子。不过,真正的问题是,为什么只有在出现错误时才使该变量在全局范围内可用?这似乎/感觉相当罕见,正如 PM 2Ring 指出的那样,可能有一种更清洁的方式来做你想做的任何事情。链接的问题还提供了一些关于为什么使用全局变量是个坏主意的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2019-05-21
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多