如何修复SyntaxError: name 'retry' is assigned to before global declaration错误?
修复SyntaxError: name 'retry' is assigned to before global declaration错误
错误原因
这个语法错误的核心是:在函数内部,你对retry变量的赋值操作发生在global retry声明之前,Python解析器会默认retry是局部变量,后续的global声明会和这个认定冲突,从而触发报错。另外,全局作用域下的global retry声明完全多余,属于无效写法。
修复步骤
1. 移除全局作用域的多余global声明
全局作用域中直接定义变量即可,不需要global关键字。把开头的global retry删掉,只保留retry = 1。
2. 将函数内的global声明移到函数顶部
在death()和win()函数中,把global retry放在函数的第一行(所有代码执行之前),提前告知Python要使用全局的retry变量,避免解析器把它当成局部变量。
修复后的完整代码
import time # 全局变量直接定义,无需global retry = 1 def message(pausetime, text): print(text) time.sleep(pausetime) def investigate(var): print("You find " + var) def death(): # 提前声明使用全局变量 global retry lose = input("你输了,要不要再试一次?按y重试,n退出游戏 ") if lose == "y": retry = 1 elif lose == "n": print("感谢游玩!希望你玩得开心") retry = 0 def win(): # 提前声明使用全局变量 global retry print("恭喜你!你击败了兽人国王,阻止了兽人的突袭,现在你是Everwood的英雄!") retry = 0 while retry >= 1: # 此处编写你的游戏逻辑代码 pass
额外说明
- Python解析函数时会先扫描所有变量赋值操作,若发现变量被赋值,默认其为局部变量,除非提前用
global声明为全局变量。把global放在分支内会导致解析器先认定变量为局部,后续声明冲突。 - 函数内仅读取全局变量时无需
global声明,只有修改全局变量时才需要。
内容的提问来源于stack exchange,提问作者omardabookwyrm
相关产品推荐
相关产品推荐

