Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 导入模块会导致错误,但将模块一分为二然后导入不会导致';t、 为什么??_Python 3.x_Tensorflow_Tf.keras - Fatal编程技术网

Python 3.x 导入模块会导致错误,但将模块一分为二然后导入不会导致';t、 为什么??

Python 3.x 导入模块会导致错误,但将模块一分为二然后导入不会导致';t、 为什么??,python-3.x,tensorflow,tf.keras,Python 3.x,Tensorflow,Tf.keras,我试图自己找出如何解决我最近提出的问题,我发现了一个潜在的解决方案,但我真的不明白为什么它有效,为什么另一个不行 对于上下文,model要求在模块中成功加载和定义变量a和b。否则,它将抛出一个错误:name错误:未定义名称“a” 从model.py开始: 导入pickle 从tensorflow进口keras #加载并返回模型所需的变量 def load_model_vars(): 返回pickle.load(打开('./file.pkl',rb')) #加载并返回模型 def load_模型(

我试图自己找出如何解决我最近提出的问题,我发现了一个潜在的解决方案,但我真的不明白为什么它有效,为什么另一个不行

对于上下文,
model
要求在模块中成功加载和定义变量
a
b
。否则,它将抛出一个错误:
name错误:未定义名称“a”

model.py开始:

导入pickle
从tensorflow进口keras
#加载并返回模型所需的变量
def load_model_vars():
返回pickle.load(打开('./file.pkl',rb'))
#加载并返回模型
def load_模型():
返回keras.models.load_model('./model.h5')
现在,为了尽可能少地再现和识别问题,我创建了一个新模块,
foo.py

从模型导入加载模型变量,加载模型
#这里的目标是假定只向其他模块公开模型
a、 b=负载\模型\变量()
globals()['model']=load_model()
然后,我创建了另一个模块来导入
foo.py
,我们把它命名为
bar.py

导入foo
#只需检查模型是否已定义
foo.model.summary()
出于某种原因,它抛出前面提到的
namererror
。为什么?变量是被定义的,它是按顺序执行的(首先加载变量,然后是模型),即使我将
a,b
更改为
globals()['a'],globals()['b']
import foo
更改为
from foo import*
从foo import a,b
更改为
,甚至更改为任何这些变量的组合,它总是会出现此错误

但当我介绍另一个模块时,比如说,
baz.py
,它包含以下两行:

从模型导入加载模型变量
a、 b=负载\模型\变量()
然后将其导入到
bar.py

从baz导入a、b
进口食品
#只需检查模型是否已定义
foo.model.summary()
如果
foo.py
保持不变,或者
a,b=load\u model\u vars()
注释掉:

从模型导入加载模型变量,加载模型
#这里的目标是假定只向其他模块公开模型
#a,b=负载\模型\变量()
globals()['model']=load_model()
它成功地加载了这个奇怪的模型!为什么?导入功能下面的魔法是什么?引擎盖下到底发生了什么