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

Python跨文件导入自定义函数时全局变量触发NameError问题

错误原因
  • Python 的全局变量是模块级作用域:global关键字声明的全局变量仅属于当前代码所在模块的命名空间,无法跨模块共享。
    1. main.py 中声明的 global level 存放在 main 模块的命名空间下,和 level.py 的命名空间完全独立
    2. level.py 中的 level_list 函数执行时,查找变量的优先级为:自身函数作用域 → level 模块的全局作用域,永远不会主动到 main 模块的作用域查找变量,因此抛出未定义的报错
  • 你的代码还存在命名冲突问题:导入的模块名为 level,你又定义了同名的全局变量 level,会直接把导入的 level 模块对象覆盖,就算作用域问题解决,后续调用函数也会报错。
修复方案

方案1:将level作为参数传入函数(最推荐,符合低耦合开发规范)

修改level.py,把变量作为入参引入:

def level_list(level):
    if level == '1':
       # 执行对应操作
    elif level ==  '2':
       # 执行对应操作
    elif level == '3':
       # 执行对应操作

修改main.py,调用时传参即可:

import level

def pick_level():
    # 直接返回输入结果,不需要声明global
    return input("Type 1, 2 or 3")

user_level = pick_level()
level.level_list(user_level)

方案2:给level模块添加全局属性(可实现需求但不推荐)

如果你一定要用全局变量的写法,可以直接给导入的level模块赋值同名属性,对应level.py的代码不需要修改,只需改main.py:

import level

def pick_level():
    # 直接给level模块的全局命名空间赋值
    level.level = input("Type 1, 2 or 3")

pick_level()
level.level_list()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:27:01