【发布时间】:2014-01-14 02:31:14
【问题描述】:
我有一个 python 2.6 脚本(是的,我知道我应该至少升级到 2.7),如下所示:
ret_code = 0
def some_func()
global ret_code
...
if __name__ == '__main__':
global ret_code
...
现在,如果我运行代码,我会收到警告: *SyntaxWarning: name 'ret_code' is assigned to before global declaration global ret_code*
为什么我会收到此警告?
我可以这样解决问题:
def some_func()
global ret_code
...
if __name__ == '__main__':
global ret_code
ret_code = 0 #assign 0 here instead of above
...
仍然没有回答我的问题。原代码有什么问题?
【问题讨论】:
-
你为什么要在
if __name__ == '__main__':块中写global ret_code? -
错误信息中说明的原因是错误的。在分配任何东西之前,必须将变量声明为全局变量。实际上,您不需要在模块级别声明名称
global,因为它们已经是这样了。只有在为函数/方法赋值之前才需要它——所以只需删除if __name__ == '__main__':语句之后的声明(这就是@delnan 他的评论的意思)。 -
问题是不能在同一个作用域内多次使用
global。 -
我建议重新打开这个问题,因为这个问题的具体答案(在
if __name__ == '__main__'下面使用global与链接的问题或其答案无关。此外,其他问题比这个问题更草率并且代表了比这个问题更基本的 Python 误解。我的建议是将这个问题重命名为Global variable warning in Python when using the 'global' keyword beneath the test for '__main__' -
是的,正如@DanNissenbaum 所说,它是关于在“if name == 'main'”中使用“global”。这不是重复的。
标签: python python-2.7 global python-2.6