我在"estimator.py"中的类"TfPoseEstimator"中有一个函数"draw_humans",其定义为:
def draw_humans:
global cocoDict
cocoDict = {}
cocoDict = dict(zip(a,zip(b,c)))
'''
'''
return (npimg, cocoDict, dist_dict)
我在 main.py 模块中调用此函数,并将返回的值分配给如下所示的变量:
image, cocoDict_clone, dist_dict_clone = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)
但是我得到了上面提到的错误。
Traceback (most recent call last):
File "run_webcam.py", line 306, in <module>
image, cocoDict_clone, dist_dict_clone = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)
File "C:PythonPython37summerPoseEstimationtf_poseestimator.py", line 772, in draw_humans
return (npimg, cocoDict, dist_dict)
NameError: name 'cocoDict' is not defined
[ WARN:1] terminating async callback
我什至试图让它全球化,但没有奏效。通常,它确实有效,有人能弄清楚吗?
实际上,问题与变量的范围有关(在我的例子中是cocoDict(。此字典在 for 循环中初始化,但在循环外部返回。因此,我在 for 循环之前声明了它,然后在 for 循环中对其进行操作后,返回它没有任何问题。
def draw_humans(npimg, humans, imgcopy=False):
global cocoDict
cocoDict = {}
for human in humans:
'''
'''
return (npimg, cocoDict, dist_dict)
我想 Python 中的范围给我带来了很多努力,因为我来自C++背景。