2017-09-20 13 views
0

非常に単純なPythonスクリプトをテストしています。どのような機能がないことは、私の質問には重要ではない私の質問には、次のコードは、何らかの形で私に与えている: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をしないのですか?あなたの関数traverseインサイド

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

結果として 'ans = ...'を指定すると、Pythonは 'traverse'関数の' ans 'をローカルとして認識します。参照を設定するだけなので、この割り当てはここでは使用しないことに注意してください。 –

+0

ああ、お元気ですか、あなたの答えをありがとう、私は今それを得た! – user2002692

答えて

1

あなたは上で定義したANSとは何の関係もない新しい変数ANSを、定義しています。同じ変数を使用したい場合は、nonlocal anstraverse関数の先頭に置きます。

+0

私はそれを今得ました、ありがとう! – user2002692

関連する問題