You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:15:17