名称错误:未定义名称"XYZ" [ WARN:1] 终止异步回调



我在"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++背景。

最新更新