Python变量范围,赋值前引用的变量

Python变量范围,赋值前引用的变量,python,scope,Python,Scope,我正在测试一个非常简单的python脚本。函数的作用对我的问题并不重要,我的问题是以下代码以某种方式提供给我: File "test.py", line 13, in traverse if root.val > minVal and ans > root.val: UnboundLocalError: local variable 'ans' referenced before assignment 但是我确实定义了ans,为什么它不抱怨minVal,而是抱怨ans cl

我正在测试一个非常简单的python脚本。函数的作用对我的问题并不重要,我的问题是以下代码以某种方式提供给我:

File "test.py", line 13, in traverse
    if root.val > minVal and ans > root.val:
UnboundLocalError: local variable 'ans' referenced before assignment
但是我确实定义了
ans
,为什么它不抱怨
minVal
,而是抱怨
ans

class Test(object):

    def findSecondMinimumValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        minVal = root.val
        ans = float("inf")

        def traverse(root):
            if not root:
                return

            if root.val > minVal and ans > root.val:
                ans = root.val

            traverse(root.left)
            traverse(root.right)

        traverse(root)
        return ans if ans != float("inf") else -1

在函数
transverse
中,您正在定义一个新变量ans,它与您上面定义的ans无关。如果要使用相同的变量,请将
非局部ans
放在
遍历
函数的顶部。

ans=…
赋值给
函数,Python会将
遍历
函数中的
ans
视为局部变量。请注意,这项作业在这里没有用,因为你只设置了一个参考。啊,我是多么垃圾,谢谢你的回答,我现在知道了!我现在明白了,谢谢!