【问题标题】:NameError: name 'XYZ' is not defined [ WARN:1] terminating async callbackNameError: name 'XYZ' is not defined [WARN:1] terminating async callback
【发布时间】:2019-10-27 06:54:45
【问题描述】:

我在“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

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

【问题讨论】:

  • 那里有opencv操作???
  • 是的,它存在于两个模块中:在我声明 cocoDict 并在 main.py 中调用它之后。有什么关系?
  • 如果这不能解决问题,请考虑在问题中添加更多细节
  • 我的情况完全不同。由于名称错误,我被卡住了。 OpenCV 与它无关。

标签: python-3.x


【解决方案1】:

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

【讨论】:

  • Python 作用域适用于整个函数(不像在 C++ 中,它几乎适用于每个 {})。在 for 循环内部和外部设置变量完全相同。重要的是顺序 - 您需要在尝试读取变量之前为其赋值。我的猜测是你的循环中有代码路径,你会在分配之前从 cocoDict 中读取。
猜你喜欢
  • 2022-12-02
  • 2013-04-09
  • 1970-01-01
  • 2020-11-07
  • 2017-01-09
  • 2017-06-14
  • 2023-03-11
相关资源
最近更新 更多