2017-09-20 3 views
0

Je suis en train de tester un script python très simple. Qu'est-ce que la fonction n'est pas important à ma question, ma question est le code suivant me donne en quelque sorte:Python Variable Scope, variable référencée avant affectation

File "test.py", line 13, in traverse 
    if root.val > minVal and ans > root.val: 
UnboundLocalError: local variable 'ans' referenced before assignment 

Mais je n'ai ans défini, pourquoi il ne se plaint pas minVal mais ne ans à propos?

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 
+3

Vous affectez à 'ans = ...' comme résultat, Python voit 'ans 'dans la fonction' traverse' comme local. Notez que cette affectation n'a aucune utilité ici, puisque vous ne définissez qu'une référence. –

+0

Ah, comme je suis vidée, merci pour votre réponse, je l'ai maintenant! – user2002692

Répondre

1

l'intérieur de votre fonction traverse vous définissez une nouvelle variable ans, qui n'a rien à voir avec les ans que vous avez définis ci-dessus. Si vous voulez utiliser la même variable, placez nonlocal ans en haut de la fonction traverse.

+0

Je l'ai maintenant, merci! – user2002692