You need to enable JavaScript to run this app. Python模块变量赋值不生效:函数修改后外部读取仍为None的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Python模块变量赋值不生效:函数修改后外部读取仍为None的问题排查

问题根源

Python对函数内变量的作用域判定有个基础规则:只要函数内部存在对某个变量的赋值逻辑,默认就会把这个变量当成函数自己的局部变量处理。
你在SetLanguage里写的DeviceLanguage = locale.getdefaultlocale()[0],触发了这个规则——Python根本不会把这个赋值操作关联到模块顶层的那个DeviceLanguage变量,反而会在函数的局部作用域里新建一个同名临时变量,你调试时看到值变化的就是这个临时的局部变量。模块顶层的DeviceLanguage从初始化设为None之后,从来没被修改过,所以主文件里等函数执行完去读这个模块变量,自然还是None。

修复方法(完全不破坏现有模块化结构)

只需要在SetLanguage函数里加一行global声明,明确告诉Python“这个变量我要改的是模块层的全局变量,不是函数里的临时变量”就行,你后续在函数里加其他业务逻辑完全不受影响。
修改后的Variables.py代码:

import locale

DeviceLanguage = None

def SetLanguage():
    # 声明要操作模块级的DeviceLanguage,而非函数局部变量
    global DeviceLanguage
    DeviceLanguage = locale.getdefaultlocale()[0]

改完之后直接运行原来的主文件代码,就能正常输出获取到的系统默认语言代码,不会再输出None。

小提示:如果后续你要在SetLanguage里同时更新多个模块级的配置变量,只需要把所有要修改的变量名统一跟在global后面就行,比如global DeviceLanguage, ConfigPath, LogLevel,写法非常简单,也不会打乱你拆分模块的清晰结构。

内容的提问来源于stack exchange,提问作者BlendSkill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 08:06:09