Python导入库时触发NameError:'myvar'未定义的问题求助
解决NameError问题的方案
错误原因
你在dosum.py里用global myvar声明的全局变量,指向的是**dosum.py模块自身的命名空间**,和主脚本script.py里定义的myvar属于两个独立的命名空间,所以函数找不到这个变量,抛出NameError。
推荐解决方案:将变量作为参数传递
这是最符合Python编程规范的方式,让函数的依赖关系明确,避免模块间的隐式耦合。
修改主脚本(\project1\script.py)
from mylib.dosum import dosum myvar = 10 # 将myvar作为第二个参数传入函数 print(dosum(1000, myvar))
修改库文件(\project1\mylib\dosum.py)
def dosum(x, myvar): valuetoreturn = x + myvar return valuetoreturn
备选方案:注入模块级全局变量(不推荐)
如果必须使用全局变量的方式,可以将主脚本的myvar注入到dosum.py的模块命名空间中,但这种方式会增加模块间的耦合,不利于代码维护。
修改主脚本(\project1\script.py)
# 不要用from ... import *,直接导入整个模块 import mylib.dosum # 给dosum模块的全局变量赋值 mylib.dosum.myvar = 10 print(mylib.dosum.dosum(1000))
修改库文件(\project1\mylib\dosum.py)
需要先在模块级别声明myvar,函数里的global才会指向这个变量:
# 模块级全局变量,先定义默认值 myvar = 0 def dosum(x): global myvar valuetoreturn = x + myvar return valuetoreturn
内容的提问来源于stack exchange,提问作者Hookstark
相关产品推荐
相关产品推荐

