0

I have a question regarding the error local variable ... referenced before assignment in Python3. Several cases of this error have been discussed in this forum (look at here); however they don't address my question. My problem at the moment is not how to resolve this issue, but to understand why there is such an issue.

Here is my code:

class Test:
    def __init__(self,n):
        if n > 0:
            self.index = n
            self.check = v[0]
        else:
            self.index = n+5
            self.check = v[1]        
            v = [18,12]

v = [90,43]
g = Test(18)

The problem arises only because of that v=[18,12] assignment. If it is erased, there won't be any error. However, my issue is that 18 > 0, and as a result, the part of the code that comes after the else must be ignored. Thus, why is there such an error?

10
  • Can you fix the formatting of your code in the question? Are the last 2 lines inside the class or not? Commented Dec 1, 2020 at 17:59
  • @RocketHazmat No they are not inside class. I will edit it now. Thanks Commented Dec 1, 2020 at 18:00
  • Also, what is v = [90,43] supposed to be? Have you tried to put that before the __init__ and then referencing self.v instead? Commented Dec 1, 2020 at 18:01
  • By putting v=[90,43] before __init__ the problem is not resolved. However; as I said, at the moment I don't want to know how to resolve this issue, but want to know why there is an error at all. Commented Dec 1, 2020 at 18:04
  • 2
    @RocketHazmat: nah, __init__ does know. That's how global vars work in python. Commented Dec 1, 2020 at 18:08

1 Answer 1

2

want to know why there is an error at all

The problem is that your assignment creates a local variable v, that shadows your global variable v. This happens at parse/load time. That's why python knows that you tried to use the local variable before giving it any value.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.