NameError:名称“ XYZ”未定义[WARN:1]终止异步回调

时间:2019-06-12 17:35:20

标签: python-3.x

我在'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:\Python\Python37\summer\PoseEstimation\tf_pose\estimator.py", line 772, in draw_humans
    return (npimg, cocoDict, dist_dict)
    NameError: name 'cocoDict' is not defined
    [ WARN:1] terminating async callback

我什至试图使其全球化,但没有奏效。通常,它确实有效,有人可以解决吗?

1 个答案:

答案 0 :(得分:0)

实际上,问题与变量的范围有关(在我的案例中是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 ++。